HomeLine-ABit block transferShow mouse

6.13 Text block transfer

Name: »Text block transfer«
Line-A Nummer: $A008
Binding: Bindings für text_blt
Beschreibung: Diese Line-A Funktion gibt ein einzelnes Zeichen aus. Die Quelle für das Zeichen muß den gleichen Aufbau wie in einem GDOS Rasterfont haben. Man kann die Fontdaten als ein großes Bild betrachten, dessen Höhe der Zeichenhöhe entspricht. Sämtliche Zeichen stehen dicht nebeneinander in diesem "Bild". Zusätzlich enthält ein GDOS Font eine Offset Tabelle, in der für jedes Zeichen der Offset in diesem großen Bild steht. Der Parameter ade_lo des Fontheaders gibt dabei das erste ASCII Zeichen an, für das ein Image und damit auch ein Offset enthalten ist. Dieser Offset ist neben dem Anfang der Fontdaten an diese Line-A Funktion zu übergeben. Der Y-Offset ist gewöhnlich 0. Da Line-A die Zeichensätze nicht selbst verwaltet und auch den Fontheader nicht kennt, müssen entsprechende Paramter auf die Fontdaten übergeben werden. Hinzu kommen eine Reihe weiterer Paramter für die diversen Effekte wie z.B. kursiv, ... Die folgenden Line-A Variablen werden benutzt:
Variable Bedeutung
   
wrt_mode Schreibmodes, es sind die folgenden Modie möglich:
REPLACE 0 Replace
TRANS 1 Transparent (OR)
XOR 2 Inverse (XOR)
INVERS 3 Inverse Transparent (XOR mit not(LN_MASK))
xacc_dda Sollte vor jedem Aufruf auf $8000 gesetzt werden.
dda_inc Vergrößerungsfaktor.
t_sclsts Vergrößerungsrichtung, also ob Verkleinert oder Vergrößert wird.
mono_status 1 wenn sämtliche Zeichen die gleiche Breite haben, es also ein nichtproportionaler Font ist, sonst 0.
sourcex X-Koordinate des auszugebenden Zeichens im Font und kann durch die Offset Tabelle ermittelt werden.
sourcey Y-Koordinate des auszugebenden Zeichens im Font, normalerweise 0.
destx X-Koordinate der Bildschirmposition, an der das Zeichen ausgegeben werden soll.
desty Y-Koordinate der Bildschirmposition, an der das Zeichen ausgegeben werden soll.
delx Breite des Zeichens, kann ebenfalls aus dem Fontheader ermittelt werden.
dely Höhe des Zeichens, kann ebenfalls aus dem Fontheader ermittelt werden.
fbase Der Zeiger auf die Fontdaten, also das "Bild" mit den einzelnen Zeichen.
fwidth Breite des Fontimage.
style Gibt die Texteffekte an. Einzelne Bits stehen für einzelne Effekte und können kombiniert werden:
Bit 0 Fettschrift
Bit 1 Helle Schrift
Bit 2 Kursivschrift
Bit 3 Unterstrichen (wird ignoriert)
Bit 4 Umrissene Schrift "outline"
litemask Eine Maske für helle (light) Schrift.
skewmask Eine Maske für kursive (skew) Schrift.
weight Die Breite bei Fettschrift (Bold).
r_off Der rechten Offset für Kursivschrift, also quasi ein Paramter für die "Schrägstellung" des Zeichens.
l_off Der linke Offset für Kursivschrift, also quasi ein Paramter für die "Schrägstellung" des Zeichens.
scale 1, wenn eine Skalierung erwünscht ist.
chup Rotationswinkel in 1/10 Grad. Es sind allerdings nur Drehungen um ein Vielfaches von 90 Grad möglich, also die Werte 0, 900, 1800, 2700.
text_fg Textfarbe.
text_bg Hintergrundfarbe.
scrtchp Ein Puffer, der doppelt soviel Platz bieten sollte, wie das Zeichen belegt, damit Line-A die Texteffekte berechnen kann.
scrpt2 Ein Index in den Puffer, der auf die Puffermitte zeigt, also die halbe Puffergröße angibt.
clip 1 wenn Clipping gewünscht wird, 0 sonst.
xmn_clip X-Koordinate die linken oberen Ecke des Clipping Bereichs, wenn Clipping eingeschaltet ist.
ymn_clip Y-Koordinate die linken oberen Ecke des Clipping Bereichs, wenn Clipping eingeschaltet ist.
xmx_clip X-Koordinate der rechten unteren Ecke des Clipping Bereichs, wenn Clipping eingeschaltet ist.
ymx_clip Y-Koordinate der rechten unteren Ecke des Clipping Bereichs, wenn Clipping eingeschaltet ist.


Das Binding von TC übergibt einen Zeiger auf den Font Header, Flags für Skalierung, Stil, Rotationsvektor, Vorder- und Hintergrundfarbe nicht an die text_blt Funktion, sondern benutzt die separate Funktion set_text_blt() zum Setzen der Parameter in dem Line-A Paramterblock. Daten über den Font werden dabei automatisch gesetzt.
Ergebnis: Die Funktion liefert keinen Returnwert.
Verfügbar: Alle TOS-Versionen.
Querverweis: Binding   Bit block transfer

6.13.1 Bindings für text_blt

Pure-C: void text_blt( int16_t x, int16_t y, uint8_t c );
Assembler:
movem.l   D0-D2/A0-A2,-(A7)  ; Register retten
move.l    pParamblk,A0       ; Zeiger Parameterblock LINEA
move.w    wmode,(36,A0)      ; Writemode in LINEA.wrt_mode
move.w    mode,(54,A0)       ; Clipmode in LINEA.clip
move.w    cx1,(56,A0)        ; linke obere Clip-Ecke, X-Koordinate in LINEA.xmn_clip
move.w    cy1,(58,A0)        ; linke obere Clip-Ecke, Y-Koordinate in LINEA.ymn_clip
move.w    cx2,(60,A0)        ; rechte untere Clip-Ecke, X-Koordinate in LINEA.xmx_clip
move.w    cy2,(62,A0)        ; rechte untere Clip-Ecke, Y-Koordinate in LINEA.ymx_clip
move.w    #$8000,(64,A0)     ; xacc_dda mit $8000 besetzen
move.w    dda_inc,(66,A0)    ; Vergrößerungsfaktor in LINEA.dda_inc
move.w    t_sclsts,(68,A0)   ; Vergrößerungsrichtung in LINEA.t_sclsts
move.w    mono_status,(70,A0); Proportionalschrift in LINEA.mono_status
move.w    sourcex,(72,A0)    ; X-Koordinate im Font in LINEA.sourcex
move.w    sourcey,(74,A0)    ; Y-Koordinate im Font in LINEA.sourcey
move.w    destx,(76,A0)      ; X-Zielkoordinate in LINEA.destx
move.w    desty,(78,A0)      ; Y-Zielkoordinate in LINEA.desty
move.w    delx,(80,A0)       ; Breite des Zeichens in LINEA.delx
move.w    dely,(82,A0)       ; Höhe des Zeichens in LINEA.dely
move.l    fbase,(84,A0)      ; Start der Font-Daten in LINEA.fbase
move.w    fwidth,(88,A0)     ; Breite des Fontimage in LINEA.fwidth
move.w    style,(90,A0)      ; Schreibstil in LINEA.style
move.w    litemask,(92,A0)   ; Maske für Light in LINEA.litemask
move.w    skewmask,(94,A0)   ; Maske für Kursiv in LINEA.skewmask
move.w    weight,(96,A0)     ; Breite bei Bold in LINEA.weight
move.w    r_off,(98,A0)      ; Kursiv-Offset rechts in LINEA.r_off
move.w    l_off,(100,A0)     ; Kursiv-Offset links in LINEA.l_off
move.w    scale,(102,A0)     ; Vergrößerung ja/nein in LINEA.scale
move.w    chup,(104,A0)      ; Rotationswinkel in LINEA.chup
move.w    text_fg,(106,A0)   ; Textfarbe in LINEA.text_fg
move.l    scrtchp,(108,A0)   ; Puffer in LINEA.scrtchp
move.w    scrpt2,(112,A0)    ; Index in Puffermitte in LINEA.scrpt2
move.w    text_bg,(114,A0)   ; Hintergrundfarbe in LINEA.text_bg
dc.w      $A008              ; Line-A Opcode
movem.l   (A7)+,D0-D2/A0-A2  ; Register restaurieren

HomeLine-ABit block transferShow mouse