*
* ScreenWindowOK.asm - Demo zum Öffnen eines Screens+Windows
*

execBase        = $4

OpenScreen      = -198
CloseScreen     = -66
OpenLibrary     = -552
CloseLibrary    = -414
OpenWindow      = -204
CloseWindow     = -72

Wait            = -318
ReplyMsg        = -378
GetMsg          = -372

customScreen    = $F
windowSizing    = $1
windowDrag      = $2
windowDepth     = $4
windowClose     = $8
activate        = $1000
Flags           = windowSizing|windowDrag|windowDepth|windowClose|activate
hires           = $8000

start:          move.l  execBase,a6             * execBase nach a6
                lea     IntName,a1              * Name nach a1
                move.l  #33,d0                  * Version #33 nach d0
                jsr     OpenLibrary(a6)         * Intuition öffnen
                tst.l   d0                      * Fehler?
                beq     endeAll                 * Mist!
                move.l  d0,intBase              * Zeiger sichern

                move.l  intBase,a6              * Basisadresse nach a6
                lea     ScreenDaten,a0          * ScreenDaten nach a0
                jsr     OpenScreen(a6)          * Screen öffnen
                tst.l   d0                      * alles klar?
                beq     ende2                   * nein, doch nicht!
                move.l  d0,Screen               * Zeiger sichern

                lea     WindowDaten,a0          * WindowDaten nach a0
                jsr     OpenWindow(a6)          * Window öffnen
                tst.l   d0                      * Fehler?
                beq     ende1                   * Schade 'drum!
                move.l  d0,Window               * Zeiger sichern

*
* Hier wird über IDCMP gewartet, bis der Anwender
* das Schließsymbol angeklickt hat.
*

MessageLoop:    move.l  Window,a0               * Window nach a0
                move.l  $56(a0),a0              * userPort holen
                move.l  a0,a5                   * und retten
                move.b  $0f(a0),d1              * Signalmaske holen
                moveq   #0,d0                   * d0 löschen
                bset    d1,d0                   * benötigte Signale
                                                * setzen
                move.l  execBase,a6             * auf Nachricht
                jsr     Wait(a6)                * warten

                move.l  a5,a0                   * userPort holen
                move.l  execBase,a6             * execBase nach a6
                jsr     GetMsg(a6)              * Nachricht holen
                move.l  d0,a1                   * und sichern
                move.l  $14(a1),d4              * diverse
                move.l  $18(a1),d5              * Parameter
                move.l  $1c(a1),a4              * sichern
                move.l  execBase,a6             * execBase nach a6
                jsr     ReplyMsg(a6)            * Nachricht beantworten

                cmpi.l  #$200,d4                * Schließsymbol angeklickt?
                beq.s   endofidcmp              * Schluß!

                bra.s   MessageLoop             * war wohl was anderes


endofidcmp:     move.l  intBase,a6              * intBase nach a6
                move.l  Window,a0               * Zeiger nach a0
                jsr     CloseWindow(a6)         * Window schließen

ende1:          move.l  Screen,a0               * Zeiger nach a0
                jsr     CloseScreen(a6)         * Screen schließen

ende2:          move.l  execBase,a6             * execBase nach a6
                move.l  intBase,a1              * intBase nach a1
                jsr     CloseLibrary(a6)        * Intuition schließen

endeAll:        rts                             * das war's

*
* Datenteil
*

 even
ScreenDaten:    dc.w    0                       * leftEdge
                dc.w    0                       * topEdge
                dc.w    640                     * width
                dc.w    256                     * height
                dc.w    2                       * depth
                dc.b    0                       * detailPen
                dc.b    1                       * blockPen
                dc.w    hires                   * viewModes
                dc.w    customScreen            * type
                dc.l    0                       * font
                dc.l    ScreenTitel             * defaultTitle
                dc.l    0                       * gadgets
                dc.l    0                       * customBitMap

ScreenTitel:    dc.b    "Ein Screen.",0         * Screen-Titel
 even                                           * *** WICHTIG !!! ***

 even
WindowDaten:    dc.w    50                      * leftEdge
                dc.w    50                      * topEdge
                dc.w    250                     * width
                dc.w    75                      * height
                dc.b    1                       * detailPen
                dc.b    3                       * blockPen
                dc.l    $200                    * idcmpFlags
                dc.l    Flags                   * flags
                dc.l    0                       * firstGadget
                dc.l    0                       * checkMark
                dc.l    WindowTitel             * title
Screen:         dc.l    0                       * screen (wird beim Öffnen
                                                * des Screens initialisiert)
                dc.l    0                       * bitMap
                dc.w    50                      * minWidth
                dc.w    50                      * minHeight
                dc.w    640                     * maxWidth
                dc.w    256                     * maxHeight
                dc.w    customScreen            * type

WindowTitel:    dc.b    "Ein Window.",0         * Window-Titel
 even                                           * *** WICHTIG ! ***

Window:         dc.l    0                       * Window-Zeiger
intBase:        dc.l    0                       * Intuition-Adresse
IntName:        dc.b    "intuition.library",0   * Intuition-Name
 even                                           * *** WICHTIG ! ***

                END
