•  Back 
  •  Titel 
  •  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-File15.13.3.1.3  Die PFONTINFO-Struktur                                TOS

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