This is an old version from the tos.hyp. The new is on GitHub!

HomeLine-AArbitrary lineFilled rectangle

6.9 Horizontal line

Name: »Horizontal line«
Line-A Nummer: $A004
Binding: Bindings für horizontal_line
Beschreibung: Diese Line-A Funktion zeichnet eine horizontale Line. Die folgenden Line-A Variablen werden benutzt:
Variable Bedeutung
   
x1 X-Koordinate des ersten Endpunkts.
y1 Y-Koordinate der Linie.
x2 X-Koordinate des zweiten Endpunkts.
fg_bp_1 Bitwert der ersten Plane für die Farbe, mit der gefüllt werden soll.
fg_bp_2 Bitwert der zweiten Plane (nur niedrige oder mittlere Auflösung).
fg_bp_3 Bitwert der dritten Plane (nur niedrige Auflösung).
fg_bp_4 Bitwert der vierten Plane (nur niedrige Auflösung).
patptr Zeiger auf ein Feld mit 16 Bit Linienmustern.
patmsk Anzahl Linienmuster - 1. In Abhängigkeit von der y-Koordinate wird nun aus dem Feld mit den Linienmustern eines ausgewählt. Der Index des verwendeten Linienmusters läßt sich durch (y mod (patmsk + 1)) berechnen. Durch die Angabe mehrerer Linienmuster und mehrmaliges Aufrufen dieser Funktion für aufeinanderfolgende Zeilen lassen sich leicht auch komplexe Muster zeichnen.
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))
multifill 0 gibt an, das nur die erste Farbebene gezeichnet werden soll, ein Wert >0 daß alle Farbebenen gezeichnet werden sollen.


Hinweis: Diese Funktion wird intern für die Flächenfüllroutinen benutzt.

Das Binding von TC übergibt Linienmuster, Schreibmodus und Farbe nicht an die horizontal_line Funktion, sondern benutzt separate Funktionen set_fg_bp(), set_wrt_mode() und set_pattern() zum Setzen der Parameter in dem Line-A Parameterblock.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Alle TOS-Versionen.
Querverweis: Binding   LINEA   Filled rectangle

6.9.1 Bindings für horizontal_line

Pure-C: void horizontal_line( int16_t x1, int16_t y1, int16_t x2 );
Assembler:
movem.l   D0-D2/A0-A2,-(A7)  ; Register retten
move.l    pParamblk,A0       ; Zeiger Parameterblock LINEA
move.w    x1,(38,A0)         ; erste X-Koordinate in LINEA.x1
move.w    y1,(40,A0)         ; erste Y-Koordinate in LINEA.y1
move.w    x2,(42,A0)         ; zweite X-Koordinate in LINEA.x2
move.w    colbit0,(24,A0)    ; Bit für erste Plane in LINEA.fg_bp_1
move.w    colbit1,(26,A0)    ; Bit für erste Plane in LINEA.fg_bp_2
move.w    colbit2,(28,A0)    ; Bit für erste Plane in LINEA.fg_bp_3
move.w    colbit3,(30,A0)    ; Bit für erste Plane in LINEA.fg_bp_4
move.w    wmode,(36,A0)      ; Writemode in LINEA.wrt_mode
move.w    patptr,(44,A0)     ; Linienmuster in LINEA.patptr
move.w    patmsk,(48,A0)     ; Anzahl Muster in LINEA.patmsk
move.w    mfill,(52,A0)      ; Writemode in LINEA.multifill
dc.w      $A004              ; Line-A Opcode
movem.l   (A7)+,D0-D2/A0-A2  ; Register restaurieren

HomeLine-AArbitrary lineFilled rectangle