MENU	MACRO
	dc.l	\1
	dc.w	\3*8,0,(_TE\@-_TA\@)*8,10,1
	dc.l	_TA\@,\2
	dc.w	0,0,0,0
_TA\@	dc.b	\4,0
_TE\@	even
	ENDM

ITEM	MACRO
_IKEY	SET	0
_ISTR	SET	0
_ILEN	SET	2
	IFNC	'','\4'
_IKEY	SET	4
_ISTR	SET	\4
_ILEN	SET	33
	ENDC
	dc.l	\1
	dc.w	0,\2*11,(_TE\@-_TA\@)*8+_ILEN,10,$52+_IKEY
	dc.l	0,_IT\@,0
	dc.b	_ISTR
	even
	dc.l	0,0
_IT\@	dc.b	0,1,0,0
	dc.w	2,1
	dc.l	0,_TA\@,0
_TA\@	dc.b	\3,0
_TE\@	even
	ENDM

; --------------------------

Start	moveq.l	#0,d7
	move.l	4.w,a6
	sub.l	a1,a1		; a1 = #0
	jsr	-294(a6)	; FindTask(Exec)
	move.l	d0,a4
	tst.l	172(a4)		; pr_CLI ( =0 ?)
	bne.s	Main
	moveq.l	#1,d7
	lea	92(a4),a0	; pr_MsgPort
	jsr	-384(a6)	; WaitPort(Exec)
	lea	92(a4),a0	; pr_MsgPort
	jsr	-372(a6)	; GetMsg(Exec)
Main	bsr.s	OpenAll
	move.l	Window(pc),d7
	beq.s	Ende
	move.l	IntBase(pc),a6
	move.l	d7,a0
	lea	Menu(pc),a1
	jsr	-264(a6)	; SetMenuStrip()
Wait	move.l	4.w,a6
	move.l	d7,a0
	move.l	86(a0),a0	; WindowMessagePort
	jsr	-384(a6)	; WaitPort()
	move.l	d7,a0
	move.l	86(a0),a0	; WindowMessagePort
	jsr	-372(a6)	; GetMsg()
	move.l	d7,d0
	bsr.s	GetMenu		; MenuStatus holen
	cmp.l	#1,d0		; MenuNr 1 ?
	bne.s	Wait
	cmp.l	#3,d1		; ItemNr 3 ?
	bne.s	Wait
	move.l	IntBase(pc),a6
	jsr	-54(a6)		; ClearMenuStrip()
Ende	bsr.s	CloseAll
	rts

; --------------------------

OpenAll	move.l	4.w,a6
	lea	IntName(pc),a1
	jsr	-408(a6)	; OldOpenLibrary()
	move.l	d0,IntBase
	move.l	d0,a6
	lea	NewWin(pc),a0
	jsr	-204(a6)	; OpenWindow()
	move.l	d0,Window
	rts

; --------------------------

CloseAll move.l	IntBase(pc),a6
	move.l	Window(pc),a0
	cmp.l	#0,a0
	beq.s	.NoWin
	jsr	-72(a6)		; CloseWindow()
.NoWin	move.l	4.w,a6
	move.l	IntBase(pc),a1
	jsr	-414(a6)	; CloseLibrary()
	rts

; --------------------------

GetMenu	move.l	a0,-(a7)	; benutztes Register retten
	move.l	d0,a0		; ^Window nach A0
	move.l	94(a0),a0	; Window_MessageKey
	cmp.l	#$0100,20(a0)	; war`s IDCMP-MENUPICK ?
	bne.s	NoMenu		; Nein dann Ende
	move.w	24(a0),d0	; Message+24 nach D0
	cmp.w	#$ffff,d0	; Kein Menu
	beq.s	NoMenu		; dann Ende
	move.l	d0,d1
	and.l	#$f,d0		; Im LowNibble steht MenuNr-1
	addq.w	#1,d0		; MenuNr in D0
	and.l	#$0ff0,d1	; Hier wird die ItemNr ermittelt
	lsr.w	#5,d1
	sub.w	#$3f,d1		; ItemNr in D1
	bra.s	Exit
NoMenu	moveq.l	#0,d0		; Kein Menu
	moveq.l	#0,d1		; Kein Item
Exit	move.l	(a7)+,a0	; Register zurückholen
	rts

; --------------------------

Window	dc.l	0
IntName	dc.b	"intuition.library",0
	even
IntBase	dc.l	0

; --------------------------

NewWin	dc.w	0,0,640,256
	dc.b	0,1
	dc.l	$00000100	; IDCMP-Flags
	dc.l	$00001007	; Flags
	dc.l	0,0
	dc.l	Title
	dc.l	0,0
	dc.w	0,0,640,256,1
Title	dc.b	"MenuTest",0
	even

; --------------------------

Menu	MENU	0,Item1,1,"Menu"
Item1	ITEM	Item2,0,"Item1"
Item2	ITEM	Item3,1,"Item2","S"
Item3	ITEM	0,2,"Quit","Q"

