
;This program opens a window and displays the same Arguments
; that were given to the program.

 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
_LVOMove          EQU -$00f0
_LVOText          EQU -$003c

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

wa_SIZEOF      EQU 8
wa_Name        EQU 4
sm_NumArgs     EQU 28
sm_ArgList     EQU 36
it_IText       EQU 12

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

 MOVE.L A0,DosCmdBuf
 MOVE.L D0,DosCmdLen
 INIT_AMIGA

;Open Libraries:

 LEA GfxName,A1
 MOVEQ #0,D0
 CALLSYS OpenLibrary
 MOVE.L D0,GfxBase
 BEQ EXIT

 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 gadget:

 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 gadget clicked: Program ends:
;First close the window:

 MOVE.L MyWindow,A0
 LINKSYS CloseWindow,IntuitionBase

EXIT:

;Now close the library: Must be orderly!:

 MOVE.L GfxBase,D0
 BEQ.S No_Gfx
 MOVE.L D0,A1
 CALLSYS CloseLibrary

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

No_Intui:
 EXIT_AMIGA

PrintText:

 MOVE.L WBenchMsg,D0
 BEQ.S \CLI

;The program was called from the Workbench:

 MOVE.L D0,A5
 MOVE.L sm_NumArgs(A5),D2  ;number of arguments
 SUBQ.L #1,D2
 BCS.S \R
 MOVE.L sm_ArgList(A5),A4
 ADDQ.L #wa_Name,A4        ;^ to 1st pointer of the string

;Output the parameter list

 MOVEQ #0,D0               ;Start-X-Position
 MOVEQ #0,D1               ;Start-Y-Position
\LOOP:
 MOVEM.L D0-D2,-(SP)
 MOVE.L MyWindow,A0
 MOVE.L RastPort(A0),A0
 LEA MyIntuiText,A1
 MOVE.L (A4),D3
 BEQ.S \Next
 MOVE.L D3,it_IText(A1)  ;move pointer
 LINKSYS PrintIText,IntuitionBase
\Next:
 MOVEM.L (SP)+,D0-D2
 ADDQ.L #wa_SIZEOF,A4
 ADDQ.L #8,D0
 ADDQ.L #8,D1
 DBRA D2,\LOOP
\R:
 RTS

\CLI:

;The program was called from CLI:

 MOVE.L MyWindow,A5
 MOVE.L RastPort(A5),A5
 MOVE.L A5,A1
 MOVEQ #0,D0
 MOVEQ #8,D1
 LINKSYS Move,GfxBase
 MOVE.L A5,A1
 MOVE.L DosCmdBuf,A0
 MOVE.L DosCmdLen,D0
 LINKSYS Text,GfxBase
 RTS

 DATA
IntuitionName:DC.B 'intuition.library',0
GfxName:DC.B 'graphics.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 '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
GfxBase:       DS.L 1
MyWindow:      DS.L 1
DosCmdBuf:     DS.L 1
DosCmdLen:     DS.L 1

 END
