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