                CSECT   text

                xdef    _DrawRectangle
                xref    _GfxBase

_LVOSetAPen     EQU     -342
_LVORectFill    EQU     -306

*
* Dies ist die Routine, um die es geht. Sie zeichnet ein Rechteck
* in die BitMap des angegebenen RastPorts. Sie benötigt diese Parameter:
*
* A1: Zeiger auf den RastPort
* D0: x-Koordinate der linken, oberen Ecke
* D1: y-Koordinate der linken, oberen Ecke
* D2: x-Koordinate der rechten, unteren Ecke
* D3: y-Koordinate der rechten, unteren Ecke
*

_DrawRectangle: link    a5,#-20                 * eigenen Stack einrichten

                movem.l d0-d7/a0-a6,-(SP)       * alle Register sichern

*
* Wir haben an dieser Stelle folgendes Stackframe:
*
* A5   - alter Stackframe-Zeiger
* A5+4 - Rücksprungadresse
* A5+8 - 1. Parameter
* ...
*

                move.l  8(a5),a1                * 1. Parameter
                move.l  12(a5),d0               * 2. Parameter
                move.l  16(a5),d1               * 3. Parameter
                move.l  20(a5),d2               * 4. Parameter
                move.l  24(a5),d3               * 5. Parameter

                move.l  _GfxBase,a6             * GfxBase (C-Teil) laden

                move.l  a1,a4                   * RastPort sichern
                subq.w  #2,d0                   * Koordinaten für den
                subq.w  #2,d1                   * Schatten
                movem.w d0-d3,-(SP)             * Register auf den Stack
                move.w  #2,d0                   * Farbe wechseln
                jsr     _LVOSetAPen(a6)

                movem.w (SP)+,d0-d3             * Register vom Stack
                movem.w d0-d3,-(SP)             * nochmal draufkopieren
                move.l  a4,a1                   * RastPort holen
                jsr     _LVORectFill(a6)        * Schatten zeichnen

                move.l  a4,a1                   * RastPort holen
                moveq   #1,d0                   * Farbe wechseln
                jsr     _LVOSetAPen(a6)

                movem.w (SP)+,d0-d3             * Register vom Stack
                move.l  a4,a1                   * RastPort holen
                addq.w  #2,d0                   * Koordinaten für das
                addq.w  #2,d1                   * richtige Rechteck
                jsr     _LVORectFill(a6)        * Rechteck zeichnen

                movem.l (SP)+,d0-d7/a0-a6       * alle Register holen
                unlk    a5                      * Stack freigeben
                rts                             * und zurück

                END

