Revistas en papel
 Amiga World Nº18 - Febrero 1991
Anterior
MenĂº
Logotipo

El Amiga Me Encanta ha conseguido el permiso por escrito de IDG Comunications España
para ofrecer los artículos de la revista Amiga World España.

ESTRUCTURA DEL COLOR EN LOS  FONTS
Amiga World

Por Betty Clay

La versión 2.0 del software del sistema añade un nuevo aspecto al directorio de color de los Fonts. Ahora un sistema estándar, ColorFonts es compatible con los anteriores Fonts, sin embargo requiere una serie de inserciones en la estructura de letras. El fichero ColorFonts consiste en las mismas tres partes que las del fichero de fuentes en disco: un fichero que contiene los fonts (el fichero 'nombre.font'), un directorio que se corresponde con el nombre del font y otro fichero conteniendo las características del mismo. El fichero de definición contiene el font actual, con la altura en puntos del mismo. COmo ejemplo de como el sistema maneja un fichero de este tipo, examinaremos una estructura correspondiente al font Quest/14.4C


La estructura de ColorFont

Cuando usted requiere un font por el nombre, el sistema mira primero el fichero de contenido de fuentes (FontsContents). Este pequeño fichero contiene únicamente el nombre del Font, el directorio donde se encuentra, el tamaño y los flags que describen sus atributos. Dicho fichero informa al sistema del directorio que contiene el Font deseado, además de informar si se encuentra en dicho directorio el tamaño y el estilo de font deseado. El siguiente ejemplo muestra la estructura en 'C' de Quest:

   Struct ColorTextFont {
   struct TextFont ctf_TF;
   UWORD ctf_Flags;
   UBYTE ctf_Depth;
   UBYTE ctf_FgColor;
   UBYTE ctf_Low;
   UBYTE ctf_High;
   UBYTE ctf_PlanePick;
   UBYTE ctf_PlaneonOff;
   struct ColorFontColors *ctf_ColorFontColors;

Como seguramente habrá podido comprobar un fichero del formato ColorFont comienza con la misma estructura que la estandar de los discos de fonts, pero sin embargo contiene nuevas definiciones para el control del color. Debido a que quizás usted no comprenda dicha estructura, examinaremos el volcado en Hexadecimal del fichero Quest. Dicho volcado comienza de la siguiente forma:

   0000:   000003F3   00000000   00000001   00000000
   0010:   00000000   000005BB   000003E9   000005BB
   0020:   70004E75   00000000   00000000   0c000022
   0030:   1d460F80   00010000   00005175   65737420
   0040:   20202020   20202020   20202020   20202020
   0050:   20202020   20202020   20200000   00000000
   0060:   00000c00   00221D46

El sistema crea un nudo que, precediendo a la actual estructura de font, incluye el font en la lista del sistema cuando el font es cargado. $3F3 es el bloque identificador Hunk_Header. $00000000 indica que no es necesario cargar ninguna librería para este fichero; $00000001 informa que sólo es necesario cargar el Hunk. Si Quest necesitase más de un Hunk para ser cargado, las próximas dos palabras largas (32 bits) contendrían la dirección del primer y último Hunk a cargar, $5BB es el tamaño del fichero en dobles palabras. $000003F9 informa que se trata de un Hunk de código. El tamaño en dobles palabras se repite de nuevo.

En 0020 se encuentra una novedad, $7000 es la instrucción en código máquina MOVEQ #0,D0 y $4E75 es RTS (retornar de una subrutina). Esta lista se origina en estructura de librería de la DiskFontBase, la cual el sistema añade el nuevo font cargado a dicha lista. Las dos dobles palabras siguientes serán reemplazadas por ambos punteros indicando la ubicación en memoria de dichos fonts, las cuales no se conocen lógicamente hasta que estos no sean cargados en memoria. $0C es el identificador de un nudo de Font, $00 define la prioridad cero y el nudo acaba con un puntero al nudo de nombre.

En el siguiente segmento, $0F80 es el identificador de fichero de Fonts y $0001 es el número de revisión, a continuación siguen dos dobles palabras vacías, en donde se almacenará la dirección de segmento cuando este sea cargado. $5175657374 es el correspondiente ASCII del nombre Quest.


La estructura TextFont

El sistema necesita toda la información vista anteriormente para cargar el font y reconocerlo por el sistema. La estructura que describe con detalle toda la información con respecto al Font es la siguiente:

   struct TextFont {
   struct   Message tf_Message;
   UWORD    tf_Ysize;             $0014
   UBYTE    tf_Style;                40
   UBYTE    tf_Xsize;                62
   UWORD    tf_Baseline;           0012
   UWORD    tf_BoldSmear;          000E
   UWORD    tf_accessors;          0000
   UBYTE    tf_Lochar;               20
   UBYTE    tf_Hichar;               7A
   APTR     tf_CharData;       000000AA
   UWORD    tf_modulo;             007C

En esta estructura la información se describe en términos que el Amiga puede comprender, así por ejemplo $14 define la altura del Font. En la línea 70 $40 define el Font del tipo ColorFont, mediante el parámetro $40, $62 informa al sistema de que se trata de un Font diseñado, no construido, posteriormente se define el tamaño en pixels de ancho, seguidamente se informa de donde se encuentra ubicada la línea de base (aquella sobre la que se 'sienta' el carácter).

Un fichero del
formato ColorFont
comienza
con la misma
estructura
que la estandar
de los discos
de fonts

Al final de la línea 70 se encuentra $00AA que es un puntero que informa de la ubicación del BitMap necesario para la construcción del Font en cuestión, pero para encontrar los datos se debe sumar $020 que es el número que define el comienzo del primer carácter. El módulo define la cantidad de datos necesarios para cumplimentar una sola línea de información en la representación del Font.


Cogiendo información sobre el color

Para los Fonts normales la información sobre el color no se encontraría en este punto, sin embargo para este nuevo formato de Fonts existe un flag que identifica la existencia de una nueva estructura sobre el color, la cual se describirá a continuación.

   struct ColorTextFont {
   struct   TextFont ctf_TF;
   UWORD    ctf_Flags;
   UBYTE    ctf_Depth;
   UBYTE    ctf_FgColor;
   UBYTE    ctf_Low;
   UBYTE    ctf_High;
   UBYTE    ctf_PlanePick;
   UBYTE    ctf_PlaneOnOFF;
   struct   ctf_CharData[8];
   }:
   struct   ColorFontColors {
   UWORD    cfc_Reserved;
   UWORD    cfc_Count;
   UWORD    *cfc_ColorTable

Es en esta estructura donde se informa al sistema sobre la profundidad en planos de color, así como cantidad de información por pixel de font, además de un apuntador hacia la tabla de color que es donde se define en definitiva el color que va a tener asociado el pixel dependiendo de la cantidad de planos seleccionados. La definición del color se corresponde con los valores del estándar RGB.

A diferencia del formato normal de Font en este se puede definir la profundidad de BitPlanes correspondientes a 16 colores por carácter, lo cual es una ventaja frente a los limitados 4 colores con los que se contaba anteriormente. Otra de las innovaciones en la estructura de Fonts permite la reescalación de los mismos (tipo vectorial), aunque este tipo de letras puedan ocupar hasta 50K de memoria en su definición punto a punto. Por tanto el nuevo sistema operativo 2.0 añade nuevas estructuras a las librerías haciendo más flexible el control y aspecto gráfico de los Fonts.


Envía esta página web a un amigo:
Esta opción está desactivada temporalmente, rogamos disculpen las molestias

Volver a la página anterior

Al menú principal