
;This program opens a window and writes a message in it:

 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


;******************************************************************************
;Main Program:
;******************************************************************************

 INIT_AMIGA

;Open Library:

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

;Open Window:

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

;Output Text:

 BSR PrintText

MainLoop:

; Wait for a click on the close field

 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        ;No message was there!

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

 CMPI.L #REFRESHWINDOW,D7
 BNE.S NoRefresh

;Window contents must be output again:

 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

;Close field was clicked on: Program ends:
;First close the window:

 MOVE.L MyWindow,A0
 LINKSYS CloseWindow,IntuitionBase

EXIT:

;Close library: Must be neat!

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

PrintText:

;Output a text 10 times

 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          ;increment X-coordinate by 8
 ADDQ.L #8,D1          ;Same for the Y-coordinate
 DBRA D2,\LOOP
 RTS

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

MyNewWindow:
 DC.W 20,40         ;Left, Top
 DC.W 300,100       ;Width, 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 'My very first Window!',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 "Yippie, it really works!",0
 ALIGN

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

 END
