•  Back 
  •  VDI-Strukturen 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
Topic       : TOS - das Betriebssystem
Author      : 
Version     : tos.hyp (5. März 2013)
Subject     : Programmieren/Atari
Nodes       : 3001
Index Size  : 93602
HCP-Version : 5
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : Titel
@help       : 
@options    : +g -i -s +x +zz -t4
@width      : 70
View Ref-File7.13.5  FONT_HDR                                                   TOS

Die folgende Struktur beschreibt den Datei-Header für einen Bitmap 
Zeichensatz im Digital Research Standardformat. In diesem Format wird 
der Font als breites, monochromes Rasterbild organisiert; die Breite 
des Rasters ist die Summe aller Zeichenbreiten, die Rasterhöhe 
entspricht der Höhe eines einzelnen Zeichens. Daraus folgt: Der linke 
Rand eines Zeichens muss nicht unbedingt auf eine Bytegrenze fallen; 
nur am Ende jeder Rasterzeile wird soweit mit Null-Bits aufgefüllt, 
bis der nächste Zeilenbeginn wieder auf eine Wortgrenze fällt.

typedef struct font_hdr
{
   int16_t     font_id;        /* Zeichensatz-Nummer                    */
   int16_t     point;          /* Größe in Punkten                      */
   int8_t      name[32];       /* Name des Zeichensatzes                */
   uint16_t    first_ade;      /* erstes Zeichen im Zeichensatz         */
   uint16_t    last_ade;       /* letztes Zeichen im Zeichensatz        */
   uint16_t    top;            /* Abstand: Topline     <-> Baseline     */
   uint16_t    ascent;         /* Abstand: Ascentline  <-> Baseline     */
   uint16_t    half;           /* Abstand: Halfline    <-> Baseline     */
   uint16_t    descent;        /* Abstand: Descentline <-> Baseline     */
   uint16_t    bottom;         /* Abstand: Bottomline  <-> Baseline     */
   uint16_t    max_char_width; /* größte Zeichenbreite                  */
   uint16_t    max_cell_width; /* größte Zeichenzellenbreite            */
   uint16_t    left_offset;    /* linker Offset für Kursivschrift       */
   uint16_t    right_offset;   /* rechter Offset für Kursivschrift      */
   uint16_t    thicken;        /* Verbreiterungsfaktor für Fettschrift  */
   uint16_t    ul_size;        /* Dicke der Unterstreichung             */
   uint16_t    lighten;        /* Maske für helle Schrift (0x5555)      */
   uint16_t    skew;           /* Maske für Kursivschrift (0x5555)      */
   uint16_t    flags;          /* verschiedene Flags:
                                  gesetzt falls System-Font
                                  Bit-1: gesetzt falls Horizontal
                                         Offset-Table benutzt wird
                                  Bit-2: gesetzt falls Motorola-Format
                                  Bit-3: gesetzt falls nicht proport.   */
   uint8_t    *hor_table;      /* Zeiger auf Horizontal-Offset-Table    */
   uint16_t    *off_table;     /* Zeiger auf Character-Offset-Table     */
   uint16_t    *dat_table;     /* Zeiger auf Fontimage                  */
   uint16_t    form_width;     /* Breite des Zeichensatz-Image          */
   uint16_t    form_height;    /* Höhe des Zeichensatz-Image            */
   font_hdr *next_font;        /* Zeiger auf nächsten Font-Header       */
} FONT_HDR;

Hinweis: Da das GEM ursprünglich auf dem PC entwickelt wurde, liegen 
alle Daten normalerweise im Intel-Format vor, so daß auf Maschinen mit 
Motorola-Prozessoren bei allen Wörtern oberes und unteres Byte 
vertauscht werden müssen. Achtung: Um das Motorola/Intel-Flag (Bit-2 
der Komponente flags) abfragen zu können, muss eigentlich schon 
bekannt sein, in welchem Format der Zeichensatz vorliegt. Die Lösung 
des Problems: Davon ausgehen, dass Bit-10 der Flags niemals benutzt 
sein wird, und testen, ob Bit-2 im 67-ten Byte des Headers gesetzt ist 
(denn dann liegt der Zeichensatz im Motorola-Format vor).

Die Character-Offset-Table besitzt Einträge von 16-Bit-Werten, die den 
horizontalen Pixeloffset für jedes Zeichen innerhalb des Fontrasters 
angibt. Als Index muss man also den ASCII-Code abzüglich des ASCII- 
Codes des ersten Zeichens im Zeichensatz benutzen (Komponente 
first_ade). Die Breite eines Zeichens ergibt sich aus der Differenz 
zum Offsetwert des nächsthöheren Zeichens; damit diese Formel auch für 
das letzte Zeichen funktioniert, enthält die Tabelle übrigens stets 
einen Eintrag mehr, als Zeichen verfügbar sind.

Die Horizontal-Offset-Table enthält positive oder negative Offsetwerte 
die vor der Ausgabe eines Zeichens auf die x-Position addiert werden; 
sie wird allerdings nur bei wenigen Zeichensätzen unterstützt.

Last but not least sei darauf hingewiesen, daß sich eine normale 
Anwendung niemals mit diesem Format befassen muß; lediglich für 
Entwickler von Zeichensatzeditoren oder GDOS-Versionen sind diese 
Informationen wichtig.

Querverweis:
GDOS   NVDI   SpeedoGDOS   Vektorfonts   vst_alignment 
vst_load_fonts   vst_unload_fonts   vqt_fontheader