* GO_DOWN!

_SysBase                equ      4
_LVOOpenLibrary         equ      -552
_LVOCloseLibrary        equ      -414
_LVOGetMsg              equ      -372
_LVOOpenWindow          equ      -204
_LVOCloseWindow         equ      -72
_LVOMoveScreen          equ      -162
_LVOSetWindowTitles     equ      -276
_LVODelay               equ      -198
CLOSEWINDOW             equ      $200
WINDOWCLOSE             equ      8
WBENCHSCREEN            equ      1

dauer                   equ      800
verzoegerung            equ      0

_main:
   jsr      OeffneIntuition               ;Intuition-Library öffnen
   tst.l    IntuitionBase                 ;Fehler?
   beq      ende3                         ;Ja, dann aufhören
   jsr      OeffneDOS                     ;DOS-Library öffnen
   tst.l    DOSBase                       ;Fehler?
   beq      ende2                         ;Ja, dann aufhören
   jsr      OeffneWindow                  ;Fenster öffnen
   tst.l    WindowHandle                  ;Fehler?
   beq      ende1                         ;Ja, dann aufhören
   move.l   #dauer,d1
   jsr      Warte                         ;warten
   jsr      ScreenRunter                  ;Screen herunterziehen
   jsr      SchliesseWindow               ;Fenster schließen
ende1:
   jsr      SchliesseDOS                  ;DOS-Library schließen
ende2:
   jsr      SchliesseIntuition            ;Intuition-Library schließen
ende3:
   clr.l    d0                            ;kein Fehler
   rts                                    ;zurück

OeffneIntuition:
   lea      IntuitionName,a1              ;Zeiger auf Librarynamen
   jsr      OeffneBibliothek              ;Öffnen...
   move.l   d0,IntuitionBase              ;Basisadresse merken
   rts                                    ;und zurück ins Hauptprogramm

OeffneDOS:
   lea      DOSName,a1                    ;Zeiger auf Librarynamen
   jsr      OeffneBibliothek              ;Öffnen...
   move.l   d0,DOSBase                    ;Basisadresse merken
   rts                                    ;und zurück ins Hauptprogramm

OeffneBibliothek:
   move.l   _SysBase,a6                   ;EXEC-Basisadresse nach a6 bringen
   moveq    #0,d0                         ;egal, welche Version
   jsr      _LVOOpenLibrary(a6)           ;öffnen
   rts                                    ;zurück

SchliesseIntuition:
   move.l   IntuitionBase,a1              ;Intuition-Basisadresse nach a1
   jsr      SchliesseBibliothek           ;schließen
   rts                                    ;und zurück

SchliesseDOS:
   move.l   DOSBase,a1                    ;DOS-Basisadresse nach a1
   jsr      SchliesseBibliothek           ;schließen
   rts                                    ;und zurück ins Hauptprogramm

SchliesseBibliothek:
   move.l   _SysBase,a6                   ;EXEC-Basisadresse nach a6 bringen
   jsr      _LVOCloseLibrary(a6)          ;Bibliothek schließen
   rts                                    ;zurück

OeffneWindow:
   move.l   IntuitionBase,a6              ;Intuition-Basis nach a6
   lea      mein_fenster,a0               ;Zeiger auf Fensterdaten
   jsr      _LVOOpenWindow(a6)            ;Fenster öffnen
   move.l   d0,WindowHandle               ;Handle speichern
   move.l   d0,a0                         ;Handle nach a0 bringen
   move.l   46(a0),ScreenHandle           ;ScreenHandle speichern
   move.l   86(a0),UserPort               ;UserPort speichern
   move.l   ScreenHandle,a0               ;ScreenHandle nach a0 bringen
   move.w   14(a0),ScreenHoehe            ;Höhe des Screens speichern
   sub.w    #10,ScreenHoehe               ;-10 Punkte
   lea      ScreenTitel,a2                ;Name des Screens
   lea      w_name,a1                     ;Windowtitel
   move.l   WindowHandle,a0               ;Window-Handle nach a0 bringen
   jsr      _LVOSetWindowTitles(a6)       ;Titel neu setzen
   rts                                    ;und zurück

SchliesseWindow:
   move.l   IntuitionBase,a6              ;Intuition-Basis nach a6
   move.l   WindowHandle,a0               ;Handle nach a0
   jsr      _LVOCloseWindow(a6)           ;Fenster schließen
   rts                                    ;und zurück

ScreenRunter:
   jsr      Message                       ;Message holen
   tst.l    d0                            ;war eine Message da?
   bne      zurueck                       ;wenn ja, dann zurück
   move.l   ScreenHandle,a0               ;ScreenHandle nach a0
   move.w   10(a0),a0                     ;Obere Ecke des Screens zum Viewp.
   cmp.w    ScreenHoehe,a0                ;noch weiter verschieben?
   bcc      nichtbewegen                  ;Nein!
   jsr      Down                          ;Screen verschieben
   move.l   #verzoegerung,d1
   jsr      Warte                         ;warten
nichtbewegen:
   bra      ScreenRunter
zurueck:
   rts                                    ;Zurück ins Hauptprogramm

Warte:
   move.l   DOSBase,a6                    ;DOS-Basisadresse nach a6
   jsr      _LVODelay(a6)                 ;warten ......
   rts                                    ;zurück

Down:
   move.l   IntuitionBase,a6              ;Intuition-Basis nach a6
   move.l   ScreenHandle,a0               ;ScreenHandle nach a0
   move.l   #1,d1                         ;ein Punkt nach unten
   jsr      _LVOMoveScreen(a6)            ;verschieben
   rts                                    ;zurück

Message:
   move.l   _SysBase,a6                   ;EXEC-Basisadresse
   move.l   UserPort,a0                   ;UserPort nach a0
   jsr      _LVOGetMsg(a6)                ;Message holen
   rts                                    ;zurück

mein_fenster:
   even
   dc.w     470,0                         ;Koordinaten für links oben
   dc.w     100,10                        ;Breite,Höhe
   dc.b     3,1                           ;Schrift und Hintergrundfarben
   dc.l     CLOSEWINDOW                   ;IDCMP-Nachrichten
   dc.l     WINDOWCLOSE                   ;Schließgadget
   dc.l     0                             ;keine eigenen Gadgets
   dc.l     0                             ;kein eigenes CheckMark
   dc.l     w_name                        ;Name des Windows
   dc.l     0                             ;kein eigener Screen
   dc.l     0                             ;keine eigene Bitmap
   dc.w     100,10                        ;Mindestausmaße
   dc.w     100,10                        ;Maximalausmaße
   dc.w     WBENCHSCREEN                  ;Fenster liegt im Workbenchscreen


w_name:
               even
               dc.b     'GO_DOWN!',0
dummy:
               even
               ds.l     1
WindowHandle:
               even
               ds.l     1
ScreenHandle:
               even
               ds.l     1
UserPort:
               even
               ds.l     1
IntuitionBase:
               even
               ds.l     1
DOSBase:
               even
               ds.l     1
IntuitionName:
               even
               dc.b     'intuition.library',0
DOSName:
               even
               dc.b     'dos.library',0
ScreenTitel:
               even
               dc.b     'GO_DOWN - von Christoph Hust -- PUBLIC DOMAIN',0
ScreenHoehe:
               even
               ds.w     1

               end

