;Miscellaneous Intuition functions

	include "offsets.i"
	include "defs.i"
	include "errordefs.i"
	include "macros.i"
	include "macros2.i"

      ifd CREATOR
	incdir	"/AMOS1.3"
      else
	incdir	"/AMOS"
      endc
;	include "equ.s"		;PhxAss is buggy...
EcNumber	equ	188
Bnk_BitData	equ	0
Bnk_BitChip	equ	1
Bnk_BitBob	equ	2
Bnk_BitIcon	equ	3

	section text,code

	xref	DataBase
	xref	IllFunc
	xref	NoReqTools
	xref	GetCurIwin2
	xref	StrAlloc

	xdef	FindImenu
	xdef	FindImenuItem
	xdef	FindImenuSub
	xdef	EZRequest


FindImenu:		;Return address of menu #D0 in D0/A0, prev in A1 (Z 
			;  flag set accordingly)
	pstart2
	move.w	d2,-(a7)
	move.w	d0,d2
	bsr	GetCurIwin2
	move.l	d0,a0
	move.l	wd_UserData(a0),a0
	move.l	we_FirstMenu(a0),a0
	sub.l	a1,a1
.loop	move.l	a0,d0
	beq	.exit
	cmp.w	mu_MenuNum(a0),d2
	beq	.exit
	bcs	.high
	move.l	a0,a1
	move.l	mu_NextMenu(a0),a0
	bra	.loop
.high	moveq	#0,d0
	move.l	d0,a0
.exit	move.w	(a7)+,d2
	tst.l	d0
	ret2

FindImenuItem:		;Return address of menu A0 item #D0 in D0/A0, prev in
			;  A1 (Z flag set accordingly)
	pstart2
	move.w	d0,d1
	move.l	mu_FirstItem(a0),a0
	sub.l	a1,a1
.loop	move.l	a0,d0
	beq	.exit
	cmp.w	mi_ItemNum(a0),d1
	beq	.exit
	bcs	.high
	move.l	a0,a1
	move.l	mi_NextItem(a0),a0
	bra	.loop
.high	moveq	#0,d0
	move.l	d0,a0
.exit	ret2

FindImenuSub:		;Return address of item A0 subitem #D0 in D0/A0, prev
			;  in A1
	pstart2
	move.l	mi_SubItem(a0),a0
	sub.l	a1,a1
.loop	move.l	a0,d1
	beq	.exit
	cmp.w	mi_ItemNum(a0),d0
	beq	.exit
	bcs	.high
	move.l	a0,a1
	move.l	mi_NextItem(a0),a0
	bra	.loop
.high	moveq	#0,d0
	move.l	d0,a0
.exit	ret2

EZRequest:		;Call rtEZRequest.  On entry, title should be in A0
			;  (AMOS format), body string should be in A1 (AMOS
			;  format), gadget string in A2 (null terminated), and
			;  additional flags (besides EZREQF_CENTERTEXT) in D0.
			;  Returns result (ID of gadget selected) in D0.
			;  If title (A0) is NULL, default title is used.
	pstart2
	tst.b	(a2)
	beq	IllFunc
	movem.l	d2/a2-a6,-(a7)
	move.l	a0,a3
	lea	.tags+12(pc),a0
	or.l	d0,(a0)
	moveq	#0,d0
	move.w	(a1)+,d0
	move.w	d0,d2
	subq.w	#1,d2
	bmi	.nobody
	move.l	a1,a4
	bsr	StrAlloc
	move.l	d0,a5
	move.l	a5,a1
.lp	move.b	(a4)+,d0
	cmp.b	#'|',d0
	bne	.next
	moveq	#10,d0
.next	move.b	d0,(a1)+
	dbra	d2,.lp
	clr.b	(a1)
.nobody	move.l	a3,d0
	beq	.nottl
	tst.w	(a3)
	beq	.nottl
	moveq	#0,d0
	move.w	(a3)+,d0
	move.w	d0,d2
	bsr	StrAlloc
	move.l	d0,a4
	moveq	#0,d0
	move.w	d2,d0
	beq	.blank
	move.l	a3,a0
	move.l	a4,a1
	syscall	CopyMem
	clr.b	0(a4,d2.w)
	bra	.call
.blank	clr.b	(a4)
	bra	.call
.nottl	dinit2	a0
	amove.l	DefReqTitle,a4,a0
.call	move.l	a5,a1
	dinit2	a5
	lea	.tags(pc),a0
	move.l	a4,20(a0)
	amove.l	CurIwindow,d0,a5
	bne	.setwin
	amove.l	CurIscreen,d0,a5
	bne	.setscr
	addq.l	#8,a0
	bra	.setreq
.setscr	move.l	d0,a6
	move.l	sc_UserData(a6),a6
	move.l	se_BaseWin(a6),d0
.setwin	move.l	d0,4(a0)
.setreq	sub.l	a3,a3
	sub.l	a4,a4
	atst.l	ReqToolsBase,a5
	beq	NoReqTools
	amove.l	ReqToolsBase,a6,a5
	call	rtEZRequestA
	tst.w	d0
	bne	.exit
	moveq	#1,d0
.lp2	move.b	(a2)+,d1
	beq	.exit
	cmp.b	#'|',d1
	bne	.lp2
	addq.w	#1,d0
	bra	.lp2
.exit	movem.l	(a7)+,d2/a2-a6
	ret2
.tags	dc.l RT_Window,0
	dc.l RTEZ_Flags,EZREQF_CENTERTEXT
	dc.l RTEZ_ReqTitle,0
	dc.l TAG_END