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-File15.13.3.1.3 Die PFONTINFO-Struktur TOSDiese Struktur beschreibt einen Font. Sie enthält nach dem Aufruf des
Fontselektors den ausgewählten Font. Zudem werden diese Angaben vom
Fontselektor schon beim Aufruf ausgewertet (und der so beschriebene
Font angezeigt), wenn als VDI-Handle eine Null übergeben wird.
typedef struct
{
int fontid; /* ID des Fonts */
int fonttype; /* Typ des Fonts */
char *fontname; /* Name des Fonts */
union fsize fontsize; /* Fontgröße in pt oder fix31 */
union fsize fontwidth; /* Breite in pt oder fix31 */
char trackkern; /* Track-Kerning */
char pairkern; /* Paar-Kerning */
int fontattr; /* Attribute */
int fontskew; /* Neigung */
int fontcol; /* Farbe */
int backcol; /* Text-Hintergrundfarbe */
int halign; /* horizontale Textausrichtung */
int valign; /* vertikale Textausrichtung */
int rotation; /* Textrotation in 1/10 Grad */
int validtype; /* Typ (V_CHAR_...) oder Mapping */
int *validchars; /* benötigte Zeichen oder 0L */
} PFONTINFO;
Die Elemente im einzelnen:
fontid Die ID des Fonts, wie sie auch von der VDI-Funktion
vqt_name() zurückgegegeben wird. Die Font-ID ist eine
Zahl ungleich Null (kann also auch negativ sein).
fonttype Der Typ des Fonts, wie er ab Speedo 5 bzw. NVDI 3 verwen-
det wird:
Name Wert Fontart
BITMAP_FONT 0x0001 Pixel
SPEEDO_FONT 0x0002 Speedo
TT_FONT 0x0004 TrueType
PFB_FONT 0x0008 Type 1 (Postscript)
Diese Angaben sind z.Z. nur zur Information, aber ohne
Bedeutung für den Fontselektor. Allerdings wird es künf-
tig möglich sein, einen Font nicht nur anhand seiner ID,
sondern auch anhand seines Namens zu setzen, wobei dann
noch zusätzlich der Fonttyp benötigt wird.
Der Fonttyp ist aber auch von Interesse, wenn man die
Größe des Fonts ändern will: Bei Bitmapfonts geschieht
dies mit der VDI-Funktion vst_point(), bei allen anderen
Typen (Vektorfonts) mit der Funktion vst_arbpt().
fontname Der Name des Fonts, wie er von vqt_name() geliefert wurde
(möglicherweise wurden mehrfache Leerzeichen entfernt).
Der Aufrufer muß selbst genügend Platz für den Fontnamen
zur Verfügung stellen, also für 32 Zeichen und ein Null-
byte! Wenn Sie den Fontnamen nicht benötigen, können Sie
den Zeiger auch einfach auf Null setzen.
fontsize Die Größe des Fonts in Punkt (pt) oder 1/65536 Punkt (Typ
"fix31"):
union fsize
{
int size; /* Fontgröße in Punkt */
fix31 size31; /* Fontgröße in 1/65536 Punkt */
};
Welche der beiden Angaben gültig ist, wird global über
das Kontrollflag CC_FIX31 geregelt.
fontwidth Breite des Fonts in Punkt (pt) oder 1/65536 Punkt (Typ
"fix31"):
union fsize
{
int size; /* Fontgröße in Punkt */
fix31 size31; /* Fontgröße in 1/65536 Punkt */
};
Welche der beiden Angaben gültig ist, wird global über
das Kontrollflag CC_FIX31 geregelt.
Die Breite kann mit den VDI-Funktionen vst_width() in
Punkt und mit vst_setsize() in fix31 eingestellt werden.
trackkern Dieser Parameter gibt die Art des Track-Kernings für
vst_kern() an. Gültige Werte sind:
Wert Kerning
0 kein Kerning 1 normales Kerning
2 enges Kerning
3 sehr enges Kerning
pairkern Mit diesem Parameter kann das Pair-Kerning aus- (0) oder
eingeschaltet (1) werden, vgl. vst_kern().
fontattr Dies sind die Fontattribute (Texteffekte), wie sie auch
von der VDI-Funktion vst_effects() verwendet werden.
Calvino verwendet dieses Feld nur dann, wenn das
Kontrollflag CC_FAKESTYLE gesetzt ist.
fontskew Die Neigung des Fonts in 1/10 Grad, vgl. vst_skew().
fontcol Die Farbe des Fonts. Es werden die VDI-Farben verwendet,
d.h. 0 = Weiß, 1 = Schwarz, usw., vgl. vst_color().
backcol Die Hintergrundfarbe des Textes. Es werden die VDI-Farben
verwendet, d.h. 0 = Weiß, 1 = Schwarz, usw. Das Setzen
einer Text-Hintergrundfarbe wird vom VDI nicht direkt
unterstützt, es obliegt daher dem Aufrufer, ob und wie
dieser Parameter verwendet wird.
halign Hierüber kann die horizontale Textausrichtung angegeben
werden: Der Text soll linksbündig, rechtsbündig oder
zentriert ausgegeben werden.
Name Wert Ausrichtung
THA_LEFT 0 linksbündig
THA_CENTER 1 zentriert
THA_RIGHT 2 rechtsbündig
Diese Werte entsprechen dem Parameter für die horizontale
Ausrichtung beim VDI-Aufruf vst_alignment().
valign Hierüber kann die vertikale Textausrichtung angegeben
werden: Der Text soll an der Oberkante oder der Unterkan-
te ausgerichtet oder (vertikal) zentriert ausgegeben wer-
den.
Name Wert Ausrichtung
TVA_BOTTOM 0 an der Text-Unterkante
TVA_CENTER 1 vertikal zentriert
TVA_TOP 2 an der Text-Oberkante
Diese Werte entsprechen absichtlich nicht dem Parameter
zur vertikalen Ausrichtung bei vst_alignment()! Die dort
verwendeten Werte ("Zeichenunterkante", "Zeichenzellen-
unterkante") sind für den normalen Anwender wenig intui-
tiv und sollten daher nicht Teil des User-Interfaces sein
(was sie bei der Auswahl im Fontselektor aber wären). Die
Ausrichtung muß daher vom aufrufenden Programm in die
"richtigen" Werte konvertiert werden.
rotation Textrotation in 1/10 Grad, wie sie auch von der VDI-
Funktion vst_rotation() verwendet wird.
Fehlen noch die beiden Parameter `validtype' und `validchars':
Manchmal ist es wichtig, sicherzustellen, daß der Font bestimmte
Zeichen enthält. Dafür gibt es zwei Möglichkeiten:
Wenn `validchars' Null ist, kann man mit `validtype' eine der folgen-
den vier Gruppen von Zeichen auswählen:
Name Wert Bereich Kommentar
V_CHAR_IND -1 - "egal"
V_CHAR_ASC -2 32-126 alle druckbaren ASCII-Zeichen
V_CHAR_PRT -3 32-255 alle druckbaren Zeichen
V_CHAR_ALL -4 0-255 wirklich alle Zeichen
Diese vier Gruppen dürften die häufigsten Anwendungsfälle abdecken.
Wenn sowohl `validtype' als auch `validchars' Null sind, wird der
Fontselektor dies wie V_CHAR_IND behandeln, ebenso bei anderen ungül-
tigen Werten in `validtype'.
Wenn die vier Gruppen einmal nicht ausreichen, so kann man stattdessen
über `validtype' und `validchars' auch genauer angeben, welche Zeichen
benötigt werden:
validtype enthält dann einen Wert für das vom GDOS zu verwendende
Mapping (vgl. vst_charmap()).
Die freie Wahl des Mappings steht nur mit einem entsprechenden GDOS
(SpeedoGDOS oder NVDI ab Version 3) zur Verfügung. Z.Z. sind
folgende Mappings definiert:
Name Wert Bedeutung
MAP_DIRECT 0 "direktes Mapping"
MAP_ASCII 1 ASCII-Mapping (Default)
Wenn das GDOS kein Mapping beherrscht, wird der Fontselektor nur
MAP_ASCII akzeptieren, alle anderen Mappings werden dann ignoriert
und ein Test auf Vorhandensein bestimmter Zeichen wird nicht durchgeführt.
validchars ist ein Zeiger auf ein Array von Integers (Words), über
das angegeben werden kann, welche Zeichen der Font unbedingt
enthalten soll.
Das Array besteht aus einer Folge von Von-Bis-Paaren:
∙ zwei aufeinanderfolgende Werte geben einen Bereich (von-bis)
an
∙ einzelne Zeichen werden durch Verdopplung angegeben
∙ das Ende der Liste wird durch ein Von-Bis-Paar angegeben, bei
dem `bis' kleiner ist als `von'
Beispiel: Es sollen nur Fonts angeboten werden, die alle druckbaren
ASCII-Zeichen sowie die deutschen Umlaute enthalten.
xFSL_PAR xpar;
int chars[] = { ' ', '~', /* ASCII 32..126 */
'ä','ä', 'ö','ö', 'ü','ü',
'Ä','Ä', 'Ö','Ö', 'Ü','Ü', 'ß','ß',
1,0 /* Ende der Liste */
};
xpar.font->validtype=MAP_ASCII;
xpar.font->validchars=chars;
Zukünftige GDOSse werden wahrscheinlich weitere Mappings unterstützen
(BICS, Unicode, ...). Durch die verwendete Codierung wird der
Fontselektor auch diese korrekt beherrschen: Das in `validtype'
übergebene Mapping wird einfach eingestellt und dann das Vorhandensein
der Zeichen aus `validchars' abgetestet.
Anmerkung: Die diversen Möglichkeiten mit den Parametern `validtype'
und `validchars' sollten sparsam und mit Bedacht verwendet werden, da
das notwendige Testen der Zeichen je nach GDOS recht lange dauern
kann.