
;Dieses Programm öffnet ein Fenster und schreibt einen Text hinein:

 ILABEL ':Includes/Amiga.L'

_LVOOpenLibrary   EQU -$0228
_LVOCloseLibrary  EQU -$019e
_LVOOpenWindow    EQU -$00cc
_LVOCloseWindow   EQU -$0048
_LVOWait          EQU -$013e
_LVOBeginRefresh  EQU -$0162
_LVOEndRefresh    EQU -$016e
_LVOPrintIText    EQU -$00d8

Class      EQU 20
TRUE       EQU 1
UserPort   EQU 86
RastPort   EQU 50
mp_SigBit  EQU 15

WBENCHSCREEN   EQU 1
WINDOWSIZING   EQU 1
WINDOWDRAG     EQU 2
WINDOWDEPTH    EQU 4
WINDOWCLOSE    EQU 8
SMART_REFRESH  EQU 0
SIMPLE_REFRESH EQU $00040
GIMMEZEROZERO  EQU $00400
ACTIVATE       EQU $01000
NOCAREREFRESH  EQU $20000
MyWindowFlags  EQU $0144F

JAM2           EQU 1

REFRESHWINDOW  EQU 4
CLOSEWINDOW    EQU $200
MyIDCMPFlags   EQU $204


;******************************************************************************
;Hauptprogramm:
;******************************************************************************

 INIT_AMIGA

;Library öffnen:

 LEA IntuitionName,A1
 MOVEQ #0,D0
 CALLSYS OpenLibrary
 MOVE.L D0,IntuitionBase
 BEQ EXIT

;Fenster öffnen:

 LEA MyNewWindow,A0
 LINKSYS OpenWindow,IntuitionBase
 MOVE.L D0,MyWindow
 BEQ EXIT

;Text ausgeben:

 BSR PrintText

MainLoop:

; Warte auf Anklicken des Schließfeldes

 MOVE.L MyWindow,A0
 MOVE.L UserPort(A0),A0
 MOVE.B mp_SigBit(A0),D1
 MOVEQ #1,D0
 LSL.L D1,D0
 CALLSYS Wait

MsgLoop:
 MOVE.L MyWindow,A0
 MOVE.L UserPort(A0),A0
 CALLSYS GetMsg
 TST.L D0
 BEQ.S MainLoop        ;Keine Message da gewesen!

 MOVE.L D0,A1
 MOVE.L Class(A1),D7
 CALLSYS ReplyMsg

 CMPI.L #REFRESHWINDOW,D7
 BNE.S NoRefresh

;Fensterinhalt muß neu ausgegeben werden:

 MOVE.L MyWindow,A0
 LINKSYS BeginRefresh,IntuitionBase
 BSR PrintText
 MOVE.L MyWindow,A0
 MOVEQ #TRUE,D0
 LINKSYS EndRefresh,IntuitionBase

NoRefresh:
 CMPI.L #CLOSEWINDOW,D7
 BNE.S MsgLoop

;Schließfeld wurde angeklickt: Programm beenden:
;Zuerst das Fenster schließen:

 MOVE.L MyWindow,A0
 LINKSYS CloseWindow,IntuitionBase

EXIT:

;Library schließen: Ordnung muß sein!

 MOVE.L IntuitionBase,D0
 BEQ.S No_Intui
 MOVE.L D0,A1
 CALLSYS CloseLibrary
No_Intui:
 EXIT_AMIGA

PrintText:

;10-malige Ausgabe eines Textes

 MOVEQ #0,D0
 MOVEQ #0,D1
 MOVEQ #9,D2
\LOOP:
 MOVEM.L D0-D2,-(SP)
 MOVE.L MyWindow,A0
 MOVE.L RastPort(A0),A0
 LEA MyIntuiText,A1
 LINKSYS PrintIText,IntuitionBase
 MOVEM.L (SP)+,D0-D2
 ADDQ.L #8,D0          ;X-Koordinate um 8 erhöhen
 ADDQ.L #8,D1          ;Y-Koordinate ebenso
 DBRA D2,\LOOP
 RTS

 DATA
IntuitionName:DC.B 'intuition.library',0
 ALIGN

MyNewWindow:
 DC.W 20,40         ;Left, Top
 DC.W 300,100       ;Widht, Height
 DC.B 0,1           ;Detail-, BlockPen
 DC.L MyIDCMPFlags  ;IDCMP-Flags
 DC.L MyWindowFlags ;Flags
 DC.L 0,0           ;^Gadget, ^CheckMark
 DC.L MyWindowName  ;^Name
 DC.L 0,0           ;^Screen, ^BitMap
 DC.W 20,20         ;MinWidth, -Height
 DC.W 640,256       ;MaxWidth, -Height
 DC.W WBENCHSCREEN  ;Type
MyWindowName:
 DC.B 'Mein erstes Fenster!',0
 ALIGN

MyIntuiText:
 DC.B 2,1           ;Front-, BackPen
 DC.B JAM2,0        ;DrawMode
 DC.W 0,0           ;Top-, Leftedge
 DC.L 0             ;^Font
 DC.L MyText        ;^Text
 DC.L 0             ;^NextText
MyText:DC.B "Hoppla, jetzt komm' ich.",0
 ALIGN

 BSS
IntuitionBase: DS.L 1
MyWindow:      DS.L 1

 END
 