•  Back 
  •  Inhalt 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  helpme 
  •  Show info about hypertext 
  •  View a new file 
Topic       : Dokumentation zu TOS2GEM
Author      : Thomas Binder
Version     : tos2gem.hyp (21/06/95)
Subject     : Dokumentation/Utilities
Nodes       : 62
Index Size  : 1740
HCP-Version : 3
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : 
@help       : helpme
@options    : -i +zz -t4
@width      : 75
View Ref-File
TOS2GEM simuliert per VDI einen Textbildschirm beliebiger Größe (die
Ausmaße müssen im Cookie angegeben werden). Von diesem kann bei Bedarf
auch nur ein gewisser Ausschnitt sichtbar sein. Zusätzlich kann TOS2GEM
eine beliebige Anzahl von Zeilen puffern, damit nach Beendigung eines
TOS-Programms auch ältere Ausgaben noch zur Verfügung stehen.

Der Textpuffer hat folgenden schematischen Aufbau:

+++++++++++++++++++++++++++++++++++                        \
+ gepufferter Bereich             +                         |
+                                 +                         |
+                                 +                         |
+                                 +                         |
+                                 +                         |
+                                 +                         |
+                                 +                         | max_lines
+                                 +                         | Zeilen
+++++++++++++++++++++++++++++++++++<- text_offset \         |
+ aktueller Textbildschirm        +                |        |
+                                 +                |        |
++++++++++++++++++++++<- y_offset +\               | y_size |
+                    +            + |              | Zeilen |
+ sichtbarer Bereich +            + | y_vis Zeilen |        |
+                    +            + |              |        |
+++++++++++++++++++++++++++++++++++/               /        /
\_ x_vis Zeichen ____/
\_ x_size Zeichen ________________/

Jede Zeile des Textpuffers besteht aus x_size Zeichen plus
abschließendem Nullbyte, also beträgt die Gesamtgröße max_lines *
(x_size + 1) Zeichen. Man muß dementsprechend per malloc eine
entsprechende Anzahl Bytes anfordern und die Adresse dieses
Speicherblocks im Cookie-Element text_buffer ablegen.

Das Element text_offset gibt an, welche Zeile des Textpuffers die erste
des aktuellen Textbildschirms ist. Y_offset enthält
den vertikalen Offset des sichtbaren Bereichs innerhalb des
Textbildschirms (relativ zu text_offset). Sowohl y_offset als auch
text_offset sind Ein-und Ausgabevariablen, d.h. nach zwischenzeitiger
Deaktivierung der Ausgabeumlenkung via switch_output enthalten sie die
zuletzt benutzten Werte, und umgekehrt werden Änderungen bei
Reaktivierung der Umlenkung übernommen.

Der sichtbare Bereich ist natürlich nur dann von Bedeutung, wenn y_vis
kleiner als y_size und/oder x_vis kleiner als x_size ist. Dabei
bestimmt die vertikale Cursorposition die Position des Ausschnitts; in
der Horizontalen wird jeweils nur der linke Teil des Textbildschirms
dargestellt (deswegen gibt es auch kein Element x_offset).

Hat man mit dem color-Element des Cookies Farbsupport eingestellt,
schließt sich direkt an den eigentlichen Textpuffer ein weiterer Puffer
gleicher Größe an, der die Farben für jedes Zeichen enthält. Man darf
in diesem Fall also nicht vergessen, 2 * max_lines * (x_size + 1) Bytes
Speicher für text_buffer anzufordern. Im Farbpuffer enthält jedes
Element im oberen Nibbel die Hintergrund-, im unteren Nibbel die
Vordergrund- bzw. Textfarbe (immer als VDI-Farbindex) des
entsprechenden Zeichens. Um an die Farben eines Zeichens an einer
bestimmten Position zu kommen braucht man nur den Offset, mit dem man
das Zeichen selbst erreicht, um max_lines * (x_size + 1) zu erhöhen,
und schon hat man die richtige Stelle im Farbpuffer gefunden.