# Creación manual de tipos de datos

Existen dos procedimientos para crear una definición de tipo de datos:

- Utilizar la herramienta Crear Acción. La utilización de Crear Acción se describe en el SAG.dtCrA.mkr.1.

- Crear la definición de tipo de datos manualmente.

Para crear un tipo de datos manualmente es necesario editar un archivo de la base de datos.

Este capítulo describe cómo crear definiciones de tipos de datos manualmente.

SAG.CrDT.mkr.2
SAG.CrDT.mkr.3
SAG.CrDT.mkr.4
SAG.CrDT.mkr.7
SAG.CrDT.mkr.11

## Consultas adicionales

- Para obtener una introducción a los tipos de datos, consulte el SAG.IntAc.mkr.1.

- Para obtener información de consulta sobre las definiciones de tipos de datos, consulte la página de manual `dtdtsfile(4)`.

## Razones por las que debe crear un tipo de datos manualmente

La creación manual de un tipo de datos le permite utilizar todas posibilidades incorporadas en la sintaxis de las definiciones de tipos de datos.

Deberá crear manualmente un tipo de datos si desea utilizar estas características de los tipos de datos:

- Escritura de datos basada en la ubicación (ruta)

- La posibilidad de especificar acciones asociadas con el tipo de datos que no sean Abrir e Imprimir

- Múltiples criterios de nombre, patrón o contenido para el mismo tipo de datos (por ejemplo, un tipo de datos basado en archivos llamados `*.abc` o `*.def`

- Escritura de datos basada en el enlace

## Componentes de una definición de tipo de datos: Criterios y atributos

Una definición de tipo de datos consta de dos definiciones de base de datos separadas.

- La definición
  `DATA_ATTRIBUTES`.

  La definición `DATA_ATTRIBUTES` describe el nombre del tipo de datos y el aspecto y comportamiento de los archivos de este tipo.

- La definición `
  DATA_CRITERIA`.

  La definición `DATA_CRITERIA` describe los criterios de escritura. Cada definición de criterio especifica la definición `DATA_ATTRIBUTES` a la que se aplican los criterios.

Tiene que haber como mínimo una definición `
DATA_CRITERIA` para cada definición `DATA_ATTRIBUTES`; una definición `DATA_ATTRIBUTES` puede tener varias `DATA_CRITERIA` asociadas a ella.

Por ejemplo, se puede crear una definición de atributos para archivos PostScript que describa qué aspecto tienen y cómo se comportan los archivos PostScript en el Gestor de archivos. En este caso, deberá crear dos criterios separados para el tipo de datos de PostScript: uno basado en el nombre de archivo y el otro basado en el contenido de archivo.

Para obtener más información, consulte la sección SAG.CrDT.mkr.11.

## Creación manual de un tipo de datos: Pasos generales

Esta sección describe cómo crear un archivo de configuración de tipo de datos.

### Archivos de configuración para tipos de datos

Los requisitos para los archivos de configuración que contienen definiciones de tipos de datos son:

- Los archivos deben utilizar el convenio de denominación nombre`.dt`

- Los archivos deben estar ubicados en la ruta de búsqueda de bases de datos. La ruta de búsqueda predeterminada es:

  Tipos de datos personales | DirectorioInicio`/.dt/types`
  Tipos de datos accesibles en el sistema | `/etc/dt/appconfig/types/`idioma
  Tipos de datos incorporados | `/usr/dt/appconfig/types/`idioma. Este directorio no se deberá utilizar.

Para obtener información sobre cómo modificar la ruta de búsqueda de bases de datos, consulte la sección SAG.Datab.mkr.6.

### Crear una definición de tipo de datos

1. Abra un archivo existente de la base de datos o cree uno nuevo.

   Para obtener más información, consulte la sección anterior sag.crdt.mkr.5.”

2. Defina los atributos de datos para el tipo de datos utilizando la sintaxis:

       DATA_ATTRIBUTES nombre_tipo_datos
       {
          ICON          nombre_imagen
          DESCRIPTION   cadena
          campo_atributo
          campo_atributo
          …
       }

   donde:

   nombre_tipo_datos | Nombre exclusivo dado a este tipo de datos.
   nombre_imagen | Nombre de archivo o ruta de un archivo de iconos. Utilice el nombre base del archivo. Por ejemplo, para los archivos de iconos `myimage.m.pm` y `myimage.t.pm`, utilice `myimage`.
   campo_atributo | Campo que define el aspecto o el comportamiento del tipo de datos.
   cadena | Cadena de caracteres. El contenido estará en la ayuda sobre el tema para el tipo de datos.

   Consulte la sección sag.crdt.mkr.7.

3. Defina los criterios de datos para el tipo de datos utilizando la sintaxis:

       DATA_CRITERIA nombre_criterio
       {
          DATA_ATTRIBUTES_NAME nombre_tipo_datos
          campo_criterio
          campo_criterio
          …
       }

   donde:

   nombre_criterio | Nombre exclusivo para esta definición de criterio
   nombre_tipo_datos | Nombre utilizado en la definición `DATA_ATTRIBUTES`
   campo_criterio | Campo utilizado para definir los criterios para asignar un archivo a este tipo de datos

   Consulte la sección sag.crdt.mkr.11.

4. Guarde el archivo de la base de datos.

5. Cree los iconos para el tipo de datos.

   Para obtener más información, consulte la sección sag.crdt.mkr.8.

6. Si es necesario, cree las acciones listadas en el campo `ACTIONS` de la definición de atributos.

7. Pulse dos veces Recargar acciones en el grupo de aplicaciones Herramientas_Escritorio para volver a cargar la base de datos.

### Ejemplo de creación de un tipo de datos y de una acción personales

Supongamos que el sistema contiene una aplicación llamada `xgif`, que muestra imágenes GIF. Normalmente, el programa se ejecuta escribiendo:

    xgif nombre de archivo

Tiene la posibilidad de poder mostrar imágenes GIF de distintos modos:

- Pulsando dos veces un archivo de datos GIF

- Seleccionando el archivo de datos y eligiendo la aplicación en el menú Seleccionado

  1. Abra un nuevo archivo DirectorioInicio`/.dt/types/GifViewer.dt` para editarlo.

  2. Escriba las definiciones del tipo de datos:

         DATA_ATTRIBUTES Gif
         {
            DESCRIPTION Archivo de imágenes Gif.
            ICON        GifIcon
            ACTIONS     View
         }
         DATA_CRITERIA Gif_Criteria
         {
            DATA_ATTRIBUTES_NAME  Gif
            NAME_PATTERN          *.gif
         }

  3. Escriba la definición de acción para la acción GifViewer:

         ACTION GifViewer
         {
           EXEC_STRING  xgif %(File)Arg_1"Archivo Gif a ver:"
           WINDOW_TYPE  NO_STDIO
           DESCRIPTION  Pulse dos veces o suelte un archivo \
                        para iniciar el visor de Gif.
         }

     Dado que la definición no incluye un campo `ICON`, la acción utilizará el icono predeterminado del sistema.

  4. Escriba la siguiente acción de establecer correspondencia para conectar la acción `GifViewer` a la acción View listada en la definición de tipo de datos. Utilice el campo `ARG_TYPE` para restringir la acción de ver a los archivos de tipo Gif.

         ACTION View
         {
            ARG_TYPE   Gif
            TYPE       MAP
            MAP_ACTION GifViewer
         }

  5. Guarde el archivo.

  6. Pulse dos veces Recargar acciones en el grupo de aplicaciones Herramientas_Escritorio para volver a leer la base de datos.

## Definición de los atributos de datos para un tipo de datos

La definición `DATA_ATTRIBUTES` define el aspecto y el comportamiento del tipo de datos. Especifica el nombre del tipo de datos y proporciona la posibilidad de especificar:

- El icono del Gestor de archivos (campo `ICON`)

- El comportamiento de doble pulsación y el contenido del menú Seleccionado (campo `ACTIONS`)

- La ayuda sobre el tema del tipo de datos (campo `DESCRIPTION
  `)

### Especificación de la imagen de icono utilizada para un tipo de datos

Utilice el campo `
ICON` para especificar el icono utilizado en el Gestor de archivos. Si no especifica ninguna imagen de icono, el Gestor de archivos mostrará sólo una etiqueta.

El valor del campo `
ICON` puede ser:

- Un
  nombre de archivo base.

  El nombre de archivo base es el nombre del archivo que contiene la imagen de icono, menos los sufijos de nombre de archivo para el tamaño ( `l`, `m` y `t`) y el tipo de imagen (`bm` y `pm`). Por ejemplo, si los archivos se llaman `IconoJuegos.m.pm` e `IconoJuegos.t.pm`, utilice `IconoJuegos`.

  Si utiliza el nombre de archivo base, los archivos de iconos deben ponerse en un directorio de la ruta de búsqueda de iconos:

  - Iconos personales: DirectorioInicio`/.dt/icons`

  - Iconos accesibles en el sistema: `/etc/dt/appconfig/icons/`idioma

- Una ruta absoluta al archivo de iconos, incluido el nombre de archivo completo.

  Sólo deberá utilizar la ruta absoluta si el archivo de iconos no está ubicado en la ruta de búsqueda de iconos. Por ejemplo, si el archivo de iconos `IconoJuegos.m.pm` se pone en el directorio `/doc/projects`, que no está en la ruta de búsqueda de iconos, el valor del campo `ICON` será `/doc/projects/IconoJuegos.m.pm`.

La SAG.CrDT.mkr.9 lista los tamaños de iconos que debe crear y los correspondientes nombres de archivo.

### Nombres y tamaños para iconos de tipos de datos

`Tamaño en pixels` | `Nombre de mapa de bits` | `Nombre de mapa de pixels`
48 por 48 | nombre`.l.bm` | nombre`.l.pm`
32 por 32 | nombre`.m.bm` | nombre`.m.pm`
16 por 16 | nombre`.t.bm` | nombre`.t.pm`

### Cómo asociar los tipos de datos
con las acciones

Existen dos procedimientos para que los tipos de datos se asocien con las acciones:

- El campo `
  ACTIONS` de la definición `DATA_ATTRIBUTES` lista las acciones que aparecerán en el menú Seleccionado del Gestor de archivos. La primera acción de la lista es la acción predeterminada (doble pulsación).

- Las acciones pueden restringirse a tipos de datos especificados utilizando el campo `
  ARG_TYPE` de la definición de acción.

Por ejemplo, la siguiente definición de tipo de datos crea un tipo de datos para archivos especiales “readme” creados por el administrador del sistema que utilizan el convenio de denominación `*.rm`.

    DATA_ATTRIBUTES SysReadmeFile
    {
       ICON    SysReadMe
       ACTIONS Open,Respond
    }

    DATA_CRITERIA SysReadmeFileCriteria
    {
       NAME_PATTERN         *.rm
       DATA_ATTRIBUTES_NAME SysReadmeFile
    }

Se define una acción especial Respond debajo del archivo. Abre una copia del archivo en el Editor de textos en la que se puede escribir. Cuando se guarda el archivo y se sale del Editor de textos, el archivo se envía al administrador del sistema (dirección de correo `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
    }

### Cómo ocultar archivos basándose en el tipo de datos

Si un archivo es un tipo de datos invisible, no aparece nunca en el Gestor de archivos.

Utilice el campo `PROPERTIES` de la definición `DATA_ATTRIBUTES` para especificar qué objetos de este tipo deben ocultarse:

    PROPERTIES invisible

### Especificación de comportamientos cuando se manipula el archivo

Los siguientes campos `DATA_ATTRIBUTES` los utilizan principalmente los programas de aplicaciones. Especifican cómo se comportan los archivos cuando el usuario realiza diversas actividades de escritorio.

Para obtener más información, consulte el manual Common Desktop Environment Programmer's Guide, que forma parte de la documentación de entorno del programador.

Campo | Descripción
`MOVE_TO_ACTION` | Para contenedores, como por ejemplo directorios. Especifica una acción que se debe ejecutar cuando se mueve el archivo a un contenedor de este tipo de datos.
`COPY_TO_ACTION` | Para contenedores, como por ejemplo directorios. Especifica la acción que se debe ejecutar cuando se copia un archivo en un contenedor de este tipo de datos.
`LINK_TO_ACTION` | Especifica una acción que se debe ejecutar cuando un archivo se enlaza a un archivo de este tipo de datos.
`IS_TEXT` | Especifica que los archivos de este tipo de datos contienen texto que se puede mostrar en un recuadro de texto.
`MEDIA` | Especifica el tipo de soporte de ToolTalk correspondiente.
`MIME_TYPE` | Especifica el tipo MIME correspondiente.
`X400_TYPE` | Especifica el tipo X400 correspondiente.

## Definición de los criterios de datos para un tipo de datos

La definición `
DATA_CRITERIA` define los criterios utilizados para asignar un tipo de objeto a un archivo o directorio.

Se pueden utilizar los siguientes criterios para los tipos de objeto:

Criterios | Descripción
Nombre de archivo | El nombre de archivo debe coincidir con un patrón especificado. Utilice el campo `NAME_PATTERN`.
Ubicación de archivo | La ruta debe coincidir con un patrón especificado. Utilice el campo `PATH_PATTERN`.
Contenido de archivo | Una parte especificada del contenido del archivo deben coincidir con los datos especificados. Utilice el campo `CONTENT`.
Modo de archivo | El archivo debe procesar los permisos especificados (lectura, escritura, ejecución y directorio). Utilice el campo `MODE`.
Enlaces simbólicos | La escritura se basa en el archivo al que está conectado el objeto.

Se puede utilizar más de un criterio para un tipo de datos. Sin embargo, no se deberá utilizar los criterios `NAME_PATTERN` y `PATH_PATTERN` en el mismo tipo de datos.

### Tipos de datos basados en el nombre

Utilice el campo `NAME_PATTERN` para especificar el requisito de denominación. El valor del campo puede incluir los siguientes caracteres comodín:

? | Coincide con cualquier carácter individual
* | Coincide con cualquier secuencia de caracteres (incluida una cadena nula)
[cc…] | Coincide con cualquiera de los caracteres (c) encerrados entre corchetes
[c−c] | Coincide con cualquiera de los caracteres del rango c a c

#### Ejemplos

- La siguiente definición de tipo de datos crea un tipo de datos basándose en el nombre de archivo. El nombre de archivo debe empezar por `QS` y terminar por `.doc`.

      DATA_ATTRIBUTES QS_Doc
      {
         DESCRIPTION Este archivo contiene un documento para el proyecto QS.
         ICON        Word_Doc
         ACTIONS     Open
      }

      DATA_CRITERIA QS_Doc_Criteria
      {
         NAME_PATTERN          QS*.doc
         DATA_ATTRIBUTES_NAME  QS_Doc }

- La siguiente definición crea un tipo de datos para directorios llamados `Demo_`n donde n puede ser de 0 a 9.

      DATA_ATTRIBUTES Demo_directory
      {
         DESCRIPTION  Esto es un directorio. Pulse dos veces para abrirlo.
         ICON         Demo
         ACTIONS      OpenInPlace,OpenNewView
      }

      DATA_CRITERIA Demo_directory_criteria
      {
         NAME_PATTERN         Demo_[0-9]
         MODE                 d
         DATA_ATTRIBUTES_NAME Demo_directory
      }

### Tipos de datos basados en la ubicación

Utilice el campo `
PATH_PATTERN` para especificar la ruta. Puede utilizar los mismos caracteres comodín que con `NAME_PATTERN`.

Por ejemplo, el siguiente tipo de datos utiliza un criterio basado en la ruta.

    DATA_ATTRIBUTES Project_Graphics
    {
       DESCRIPTION Archivo de gráficos para el proyecto QS. Pulse dos veces el \
                   icono para ver el gráfico.
       ICON        QSgraphics
    }

    DATA_CRITERIA Project_Graphics_Criteria
    {
       DATA_ATTRIBUTES_NAME Project_Graphics
       PATH_PATTERN         */projects/QS/graphics/*
    }

### Tipos de datos basados en el nombre y la ubicación

Para crear un tipo de datos basado en la ubicación y el nombre de archivo incluya el nombre en el valor `PATH_PATTERN`. No puede utilizar `NAME_PATTERN` y `PATH_PATTERN` en la misma definición de criterios.

#### Ejemplos

- El tipo de datos Archivos_Fuente_QS definido a continuación es aplicable a todos los archivos llamados `appn.c`, donde n= 1 a 9, ubicados en subdirectorios de `*/projects/QS`.

      DATA_ATTRIBUTES QS_Source_Files
      {
         …
      }
      DATA_CRITERIA QS_Source_Files_Criteria
      {
         PATH_PATTERN          */projects/QS/*/app[1-9].c
         DATA_ATTRIBUTES_NAME  Archivos_Fuente_QS
      }

- El siguiente tipo de datos se aplica a todos los archivos del directorio `/doc/project1` llamados `chnn.xxx` donde n es 0 a 9 y xxx es cualquier sufijo de nombre de archivo de tres caracteres.

      ”DATA_ATTRIBUTES ChapterFiles
      {
         DESCRIPTION  Archivo de capítulos para el documento de proyecto.
         ICON         capítulo
         ACTIONS      Edit,Print
      }

      DATA_CRITERIA Chapter_Criteria
      {
         PATH_PATTERN           /doc/project1/ch[0-9][0-9].???
         DATA_ATTRIBUTES_NAME  ArchivosCapítulo
      }

### Utilización de los modos de archivo como criterios de escritura

Utilice el campo `
MODE` para especificar los permisos necesarios.

Los criterios de modo se utilizan normalmente en combinación con la escritura de los datos basados en el nombre, basados en la ubicación o basados en el contenido. Le permiten limitar un tipo de datos a un archivo o a un directorio o bien especificar los permisos de lectura, escritura o ejecución necesarios.

El campo `MODE` puede incluir los siguientes caracteres y operadores lógicos:

Operador | Descripción
! | Operador lógico NOT
& | Operador lógico AND
| | OR lógico

Carácter | Descripción
f | El tipo de datos sólo es aplicable a archivos
d | El tipo de datos sólo es aplicable a directorios
r | Cualquier usuario puede leer el archivo
w | Cualquier usuario puede escribir en el archivo
x | Cualquier usuario puede ejecutar el archivo
l | El archivo es un enlace
`u` | El archivo es set-uid
`g` | El archivo es set-gid

El valor predeterminado para un modo determinado es que el modo no tiene importancia.

#### Ejemplos

- Los siguientes campos de modo restringen el tipo de datos tal como se describe a continuación:

  f&!w | Archivos de sólo lectura
  !w | Archivos y directorios de sólo lectura
  f&x | Archivos ejecutables
  f&w&x | Archivos que se pueden ejecutar y en los que se puede escribir
  x|!w | Archivos que son ejecutables o de sólo lectura

- La siguiente definición de tipos de datos crea un tipo de datos para archivos de sólo lectura no ejecutables cuyos nombres de archivo siguen el convenio de denominación `*.doc`. Se supone que se ha definido una acción Vista para el tipo de datos.

      DATA_ATTRIBUTES ReadOnlyDocument
      {
         ICON        sólo_lectura
         DESCRIPTION No se puede escribir en este documento.\
                     Si se pulsa dos veces se ejecuta el editor con \
                     una copia de sólo lectura de archivo.
         ACTIONS     View
      }
      DATA_CRITERIA ReadOnlyDocument_Criteria
      {
         NAME_PATTERN         *.doc
         MODE                 !d&!x&!w
         DATA_ATTRIBUTES_NAME ReadOnlyDocument
      }

### Establecimiento del tipo de datos basado en el contenido

Utilice el campo `
CONTENT` para especificar el tipo de datos basado en el contenido del archivo. El tipo de datos basado en el contenido puede utilizarse en combinación con el tipo de datos basado en el nombre o en la ubicación.

El tipo puede basarse en el contenido numérico o el contenido de la cadena de caracteres de los archivos. El primer byte del archivo se numera como 0.

- Para el contenido de cadena de caracteres de un archivo, utilice la sintaxis:

      CONTENT byte_inicial string cadena

- Para el contenido numérico de un archivo, utilice la sintaxis:

      CONTENT byte_inicial byte número
      CONTENT bite_inicial short número
      CONTENT byte_inicial long número

- Para el contenido de un directorio, utilice la sintaxis:

      CONTENT 0 filename "nombre_archivo"

  Utilice la anotación C estándar para los números octales (`0` inicial) y hexadecimales (`0X` inicial).

La utilización del tipo de datos basado en el contenido producirá un rendimiento más lento del sistema. Siempre que sea posible, utilice en su lugar el tipo de datos basado en el nombre o en la ubicación.

Por ejemplo, el siguiente tipo de datos, Writable_Wingz, se aplica a todos los archivos con permiso de escritura que contienen la cadena `WNGZ` al principio del archivo.

    DATA_ATTRIBUTES Writable_Wingz
    {
       …
    }

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

### Crear un tipo de datos con varios criterios independientes

Se puede crear un tipo de datos con varios criterios independientes: es decir, el archivo se asigna al tipo de datos si cumple uno de los criterios (o ambos).

1. Cree la definición `DATA_ATTRIBUTES` para el tipo de datos.

2. Cree una definición `
   DATA_CRITERIA` para cada criterio.

   Utilice el campo `DATA_ATTRIBUTES_NAME` para conectar cada criterio con la misma definición `DATA_ATTRIBUTES`.

Por ejemplo, las siguientes definiciones crean el tipo de datos Mif. El tipo se basa en el nombre o el contenido.

    DATA_ATTRIBUTES Mif
    {
       ICON         Marco
       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 cadena MIFFile
    }

## Creación de tipos de datos de entorno nacional

La ruta de búsqueda de tipos de datos incluye ubicaciones que dependen del idioma. El escritorio utiliza el valor de
`LANG` para determinar las ubicaciones en las que se buscan las definiciones de tipos de datos.

### Ubicaciones para los tipos de datos de entorno nacional

Las definiciones de tipos de datos de entorno nacional deben ponerse en los directorios dependientes del idioma apropiados de la ruta de búsqueda de acciones.

La ruta de búsqueda predeterminada es:

- Acciones personales: DirectorioInicio`/.dt/types`

- Acciones accesibles en el sistema: `/etc/dt/appconfig/types/`idioma

- Acciones incorporadas: `/usr/dt/appconfig/types/`idioma

### Establecer el entorno nacional para un tipo de datos

1. Cree un archivo en el directorio adecuado dependiente del idioma (por ejemplo, en `/etc/dt/appconfig/types/japanese`).

2. Copie la definición de tipo de datos en el archivo de configuración dependiente del idioma.

3. Establezca el entorno nacional para uno o más campos de la definición del tipo de datos.