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.