OpenWindow:				;Opens a window
					;A0=Window
	movem.l	d1-d3/a0-a1,-(a7)
	move.l	a0,$1d8(a6)
	moveq	#80,d0
	moveq	#$00,d1
	moveq	#$00,d2
	moveq	#$00,d3
	move.b	(a0)+,d2		;X width
	sub.b	d2,d0
	lsr.b	#1,d0
	add.b	d0,d2
	subq.b	#1,d2
	move.w	$14c(a6),d1
	subq.w	#1,d1
	move.b	(a0)+,d3
	sub.b	d3,d1
	lsr.b	#1,d1
	add.b	d1,d3
	subq.b	#1,d3
	move.b	d0,$1d4(a6)
	move.b	d1,$1d5(a6)
	move.b	d2,$1d6(a6)
	move.b	d3,$1d7(a6)
	bsr	DrawMenuBigBox
OpenWindow1:
	move.l	(a0)+,d0
	beq	OpenWindow6
	move.l	d0,a1
	move.b	(a1)+,d0
	cmp.b	#$01,d0
	beq	OpenWindow2
	cmp.b	#$02,d0
	beq	OpenWindow3
	cmp.b	#$03,d0
	beq	OpenWindow3
	cmp.b	#$04,d0
	beq	OpenWindow3
	cmp.b	#$05,d0
	beq	OpenWindow4
	bra	OpenWindow1
OpenWindow2:
	move.l	a0,-(a7)
	move.l	a1,a0
	moveq	#$00,d0
	bsr	OpenWindowBox
	move.l	d0,a0
	bsr	OpenWindowText
	move.l	(a7)+,a0
	bra	OpenWindow1
OpenWindow3:
	move.l	a0,-(a7)
	move.l	a1,a0
	moveq	#$01,d0
	bsr	OpenWindowBox
	move.l	d0,a0
	bsr	OpenWindowText
	move.l	(a7)+,a0
	bra	OpenWindow1
OpenWindow4:
	move.l	a0,-(a7)
	move.l	a1,a0
	addq.l	#2,a0
OpenWindow5:
	tst.b	(a0)+
	bne.s	OpenWindow5
	bsr	OpenWindowText
	move.l	(a7)+,a0
	bra	OpenWindow1
OpenWindow6:
	tst.b	(a0)
	beq	OpenWindow7
	bsr	OpenWindowText
	move.l	d0,a0
	bra	OpenWindow6
OpenWindow7:
	movem.l	(a7)+,d1-d3/a0-a1
	rts

OpenWindowText:
					;A0=Windowtext
	movem.l	d1/a0,-(a7)
	move.l	$05c(a6),-(a7)
	moveq	#$00,d0
	moveq	#$00,d1
	move.b	(a0)+,d0
	move.b	(a0)+,d1
	add.b	$1d4(a6),d0
	add.b	$1d5(a6),d1
	move.w	d0,$05e(a6)
	move.w	d1,$05c(a6)
	bsr	WriteBitmapString
	move.l	(a7)+,$05c(a6)
	movem.l	(a7)+,d1/a0
	rts

OpenWindowBox:
					;A0=Windowbox,D0=Boxtype (0=Big)
	movem.l	d1-d4/a0,-(a7)
	move.w	d0,d4
	moveq	#$00,d0
	moveq	#$00,d1
	move.b	$1d4(a6),d0
	move.b	$1d5(a6),d1
	move.l	d0,d2
	move.l	d1,d3
	add.b	(a0)+,d0
	add.b	(a0)+,d1
	add.b	(a0)+,d2
	add.b	(a0)+,d3
	tst.w	d4
	bne	OpenWindowBox1
	bsr	DrawMenuBigBox	
	bra	OpenWindowBox2
OpenWindowBox1:
	bsr	DrawMenuSelBox
OpenWindowBox2:
	move.l	a0,d0
	movem.l	(a7)+,d1-d4/a0
	rts

UpdateWindow:
					;A0=SelectinfoHead
	movem.l	d0/a0-a2,-(a7)
	move.l	a0,a1
	move.l	$1d8(a6),a2
	addq.l	#2,a2
UpdateWindow1:
	tst.l	(a2)
	beq	UpdateWindow4
	move.l	(a2)+,a0
	move.b	(a0)+,d0
	cmp.b	#$01,d0
	beq	UpdateWindow2
	cmp.b	#$05,d0
	beq	UpdateWindow3
	addq.l	#4,a1
	bra	UpdateWindow1
UpdateWindow2:
	clr.b	$1dc(a6)
	bsr	UpdateWindowInput
	addq.l	#4,a1
	bra	UpdateWindow1
UpdateWindow3:
	bsr	UpdateWindowChoice
	addq.l	#4,a1
	bra	UpdateWindow1
UpdateWindow4:
	movem.l	(a7)+,d0/a0-a2
	rts

UpdateWindowChoice:
					;A0=Choicegadget,A1=Selectinfo
	movem.l	d0-d1/a0-a1,-(a7)
	move.l	$05c(a6),-(a7)
	moveq	#$00,d0
	moveq	#$00,d1
	move.b	$1d4(a6),d0
	move.b	$1d5(a6),d1
	add.b	(a0)+,d0
	add.b	(a0)+,d1
	move.w	d0,$05e(a6)
	move.w	d1,$05c(a6)
	moveq	#'X',d0
	tst.l	(a1)
	bne.s	UpdateWindowChoice1
	moveq	#' ',d0
UpdateWindowChoice1:
	bsr	WriteBitmapChar
	move.l	(a7)+,$05c(a6)
	movem.l	(a7)+,d0-d1/a0-a1
	rts

UpdateWindowInput:
					;A0=Inputgadget,A1=Selectinfo
	movem.l	d0-d2/a0-a1,-(a7)
	move.l	$05c(a6),-(a7)
	moveq	#$00,d0
	moveq	#$00,d1
	moveq	#$00,d2
	move.b	(a0)+,d0
	move.b	(a0)+,d1
	move.b	(a0)+,d2
	addq.b	#1,d0
	addq.b	#1,d1
	sub.b	d0,d2
	add.b	$1d4(a6),d0
	add.b	$1d5(a6),d1
	move.w	d0,$05e(a6)
	move.w	d1,$05c(a6)
	moveq	#$00,d0
	move.b	$1dc(a6),d0
	move.l	(a1),a0
	add.l	d0,a0
UpdateWindowInput1:
	tst.b	d2
	beq	UpdateWindowInput3
	moveq	#' ',d0
	tst.b	(a0)
	beq	UpdateWindowInput2
	move.b	(a0)+,d0
UpdateWindowInput2:
	bsr	WriteBitmapChar
	subq.b	#1,d2
	bra	UpdateWindowInput1
UpdateWindowInput3:
	move.l	(a7)+,$05c(a6)
	movem.l	(a7)+,d0-d2/a0-a1
	rts

UnSelWindowChoice:
					;A0=UnSelectList,A1=Selectinfohead
	movem.l	d0/a0-a4,-(a7)
	move.l	a0,a3
	move.l	a1,a4
	move.l	$1d8(a6),a2
	addq.l	#2,a2
UnSelWindowChoice1:
	moveq	#$00,d0
	move.b	(a3)+,d0
	beq	UnSelWindowChoice2
	subq.b	#1,d0
	lsl.l	#2,d0
	lea	0(a4,d0.l),a1
	clr.l	(a1)
	lea	0(a2,d0.l),a0
	move.l	(a0),a0
	addq.l	#1,a0
	bsr	UpdateWindowChoice
	bra	UnSelWindowChoice1
UnSelWindowChoice2:
	movem.l	(a7)+,d0/a0-a4
	rts

EditWindow:
					;A0=SelectinfoHead,D0=Selected gadget
	movem.l	d1-d7/a0-a5,-(a7)
	move.l	$05c(a6),-(a7)
	move.b	d0,$1de(a6)
	move.l	a0,a3
	move.l	$1d8(a6),a2
	addq.l	#2,a2
EditWindow1:
	moveq	#$00,d0
	move.b	$1de(a6),d0
	subq.b	#1,d0
	lsl.l	#2,d0
	lea	0(a2,d0.l),a4
	lea	0(a3,d0.l),a1
	move.l	(a4),a0
	move.b	(a0)+,d0
	cmp.b	#$01,d0
	beq	EditWindow2
	cmp.b	#$02,d0
	beq	EditWindow3
	cmp.b	#$03,d0
	beq	EditWindow3
	cmp.b	#$04,d0
	beq	EditWindow3
	cmp.b	#$05,d0
	beq	EditWindow4
	bra	EditWindow30
EditWindow2:
	bsr	UpdateWindowInput
	moveq	#$00,d0
	moveq	#$00,d1
	moveq	#$00,d2
	move.b	(a0)+,d0
	move.b	(a0)+,d1
	move.b	(a0)+,d2
	addq.b	#1,d0
	addq.b	#1,d1
	sub.b	d0,d2
	add.b	$1d4(a6),d0
	add.b	$1d5(a6),d1
	move.w	d0,$05e(a6)
	move.w	d1,$05c(a6)
	clr.b	$1dc(a6)
	clr.b	$1dd(a6)
	move.b	d2,$1df(a6)
	bra	EditWindow5
EditWindow3:
	addq.l	#4,a0
	moveq	#$00,d0
	moveq	#$00,d1
	move.b	(a0)+,d0
	move.b	(a0)+,d1
	add.b	$1d4(a6),d0
	add.b	$1d5(a6),d1
	move.w	d0,$05e(a6)
	move.w	d1,$05c(a6)
	bra	EditWindow5
EditWindow4:
	bsr	UpdateWindowChoice
	moveq	#$00,d0
	moveq	#$00,d1
	move.b	(a0)+,d0
	move.b	(a0)+,d1
	add.b	$1d4(a6),d0
	add.b	$1d5(a6),d1
	move.w	d0,$05e(a6)
	move.w	d1,$05c(a6)
EditWindow5:
	bsr	ShowCursor
EditWindow6:
	jsr	_ReadKeyboard(a6)
	tst.b	d0
	beq	EditWindow6
	bsr	RemCursor
	cmp.b	#$9b,d0			;CSI
	beq	EditWindow20
	cmp.b	#$0d,d0			;Return
	beq	EditWindow7
	cmp.b	#$1b,d0			;Esc
	beq	EditWindow8
	cmp.b	#$09,d0			;Tab
	beq	EditWindow9
	move.l	(a4),a0
	cmp.b	#$01,(a0)
	beq	EditWindow13
	cmp.b	#' ',d0			;Space (Select)
	beq	EditWindow10
	bra	EditWindow5
EditWindow7:				;Return (OK)
	move.l	(a4),a0
	cmp.b	#$04,(a0)
	beq	EditWindow8
	cmp.b	#$01,(a0)
	beq	EditWindow9
	clr.b	$1de(a6)
	bra	EditWindow30
EditWindow8:				;Escape (Cancel)
	move.b	#$ff,$1de(a6)
	bra	EditWindow30
EditWindow9:				;Tab (Next Gadget)
	addq.b	#1,$1de(a6)
	tst.l	4(a4)
	bne	EditWindow1
	move.b	#$01,$1de(a6)
	bra	EditWindow1
EditWindow10:				;Space (Select,Toggle)
	move.l	(a4),a0
	cmp.b	#$05,(a0)
	beq	EditWindow11
	bra	EditWindow30		;(Select)
EditWindow11:
	addq.l	#3,a0
	tst.b	(a0)
	bne	EditWindow12
	not.l	(a1)			;(Toggle)
	bra	EditWindow1
EditWindow12:
	move.l	#$ffffffff,(a1)		;(Select one choice)
	move.l	a3,a1
	bsr	UnSelWindowChoice	;(Unselect the other choices)
	bra	EditWindow1
EditWindow13:
	cmp.b	#$08,d0			;BackSpace
	beq	EditWindow17
	cmp.b	#$7f,d0			;Delete
	beq	EditWindow18
	move.l	(a1),a0
	move.l	d0,d1
	bsr	EditWindowInputLen
	cmp.b	#79,d0
	beq	EditWindow5
	move.l	d1,d0
	bsr	EditWindowInputIns
	bsr	EditWindowInputFor
	bra	EditWindow19
EditWindow14:
	move.l	$1c4(a6),a0
	move.l	4(a0),d0
	cmp.b	#3,d0			;CRSR Left
	beq	EditWindow16
	cmp.b	#4,d0			;CRSR Right
	beq	EditWindow15
	cmp.b	#9,d0			;Del
	beq	EditWindow18
	bra	EditWindow5
EditWindow15:				;Cursor forward
	move.l	(a1),a0
	moveq	#$00,d0
	move.b	$1dc(a6),d0
	add.b	$1dd(a6),d0
	tst.b	0(a0,d0.w)
	beq	EditWindow5
	bsr	EditWindowInputFor
	bra	EditWindow19
EditWindow16:				;Cursor backward
	move.b	$1dc(a6),d0
	add.b	$1dd(a6),d0
	beq	EditWindow5
	bsr	EditWindowInputBac
	bra	EditWindow19
EditWindow17:				;Backspace
	move.b	$1dc(a6),d0
	add.b	$1dd(a6),d0
	beq	EditWindow5
	bsr	EditWindowInputBac
	move.l	(a1),a0
	bsr	EditWindowInputDel
	bra	EditWindow19
EditWindow18:				;Delete
	move.l	(a1),a0
	moveq	#$00,d0
	move.b	$1dc(a6),d0
	add.b	$1dd(a6),d0
	tst.b	0(a0,d0.w)
	beq	EditWindow5
	bsr	EditWindowInputDel
EditWindow19:
	move.l	(a4),a0
	addq.l	#1,a0
	bsr	UpdateWindowInput
	bra	EditWindow5
EditWindow20:				;CSI
	move.l	$1c4(a6),a0
	bsr	ReadCSIPar
	cmp.b	#$01,d0
	bne	EditWindow5
	move.l	4(a0),d0
	cmp.b	#40,d0			;Left MOBUT Pressed
	beq	EditWindow21
	cmp.b	#41,d0			;Right MOBUT Pressed
	beq	EditWindow21
	move.l	(a4),a0
	cmp.b	#$01,(a0)
	beq	EditWindow14
	bra	EditWindow5
EditWindow21:
	bsr	EditWindowGetGadget
	tst.b	d0
	beq	EditWindow5
	move.b	$1de(a6),d1
	move.b	d0,$1de(a6)
	subq.b	#1,d0
	lsl.l	#2,d0
	lea	0(a2,d0.l),a4
	lea	0(a3,d0.l),a1
	move.l	(a4),a0
	move.b	(a0)+,d0
	cmp.b	#$01,d0
	beq	EditWindow22
	bra	EditWindow10
EditWindow22:
	cmp.b	$1de(a6),d1
	beq	EditWindow5
	bra	EditWindow1
EditWindow30:
	moveq	#$00,d0
	move.b	$1de(a6),d0
	ext.w	d0
	ext.l	d0
	move.l	(a7)+,$05c(a6)
	movem.l	(a7)+,d1-d7/a0-a5
	rts

EditWindowInputLen:
					;A0=String,D0out=Length
	movem.l	d1/a0-a1,-(a7)
	moveq	#$00,d1
	lea	79(a0),a1
EditWindowInputLen1:
	cmp.l	a0,a1
	beq	EditWindowInputLen2
	tst.b	(a0)+
	beq	EditWindowInputLen2
	addq.w	#1,d1
	bra	EditWindowInputLen1
EditWindowInputLen2:
	move.l	d1,d0
	movem.l	(a7)+,d1/a0-a1
	rts

EditWindowInputIns:			;A0=String,D0=Char
	movem.l	d1/a0-a2,-(a7)
	moveq	#$00,d1
	move.b	$1dc(a6),d1
	add.b	$1dd(a6),d1
	cmp.b	#$4f,d1
	beq	EditWindowInputIns3
	lea	0(a0,d1.w),a1
	lea	79(a0),a2
EditWindowInputIns1:
	cmp.l	a1,a2
	bls	EditWindowInputIns2
	move.b	-(a2),1(a2)
	bra	EditWindowInputIns1
EditWindowInputIns2:
	move.b	d0,(a1)
	clr.b	79(a0)
EditWindowInputIns3:
	movem.l	(a7)+,d1/a0-a2
	rts

EditWindowInputDel:			;A0=String
	movem.l	d1/a0-a2,-(a7)
	moveq	#$00,d1
	move.b	$1dc(a6),d1
	add.b	$1dd(a6),d1
	cmp.b	#79,d1
	beq	EditWindowInputDel3
	lea	0(a0,d1.w),a1
	lea	79(a0),a2
EditWindowInputDel1:
	cmp.l	a1,a2
	bls	EditWindowInputDel2
	move.b	1(a1),(a1)+
	bra	EditWindowInputDel1
EditWindowInputDel2:
	clr.b	79(a0)
EditWindowInputDel3:
	movem.l	(a7)+,d1/a0-a2
	rts

EditWindowInputFor:
	movem.l	d0-d1,-(a7)
	move.b	$1dc(a6),d0
	move.b	$1dd(a6),d1
	add.b	d1,d0
	cmp.b	#79,d0
	beq	EditWindowInputFor1
	addq.b	#1,d1
	addq.w	#1,$05e(a6)
	cmp.b	$1df(a6),d1
	bne	EditWindowInputFor1
	subq.b	#1,d1
	subq.w	#1,$05e(a6)
	addq.b	#1,$1dc(a6)
EditWindowInputFor1:
	move.b	d1,$1dd(a6)
	movem.l	(a7)+,d0-d1
	rts
	
EditWindowInputBac:
	movem.l	d0-d1,-(a7)
	move.b	$1dc(a6),d0
	move.b	$1dd(a6),d1
	subq.w	#1,$05e(a6)
	subq.b	#1,d1
	bpl	EditWindowInputBac1
	addq.w	#1,$05e(a6)
	addq.b	#1,d1
	tst.b	d0
	beq	EditWindowInputBac1
	subq.b	#1,d0
EditWindowInputBac1:
	move.b	d0,$1dc(a6)
	move.b	d1,$1dd(a6)
	movem.l	(a7)+,d0-d1
	rts

EditWindowGetGadget:
					;D0out=Selected gadget
	movem.l	d1-d6/a0-a1,-(a7)
	move.l	$1d8(a6),a1
	addq.l	#2,a1
	moveq	#$00,d5
	moveq	#$00,d6
EditWindowGetGadget1:
	tst.l	(a1)
	beq	EditWindowGetGadget4
	addq.l	#1,d5
	bsr	ReadMousePosition
	move.l	(a1)+,a0
	move.b	(a0)+,d1
	cmp.b	#$01,d1
	beq	EditWindowGetGadget2
	cmp.b	#$02,d1
	beq	EditWindowGetGadget2
	cmp.b	#$03,d1
	beq	EditWindowGetGadget2
	cmp.b	#$04,d1
	beq	EditWindowGetGadget2
	cmp.b	#$05,d1
	beq	EditWindowGetGadget3
	bra	EditWindowGetGadget4
EditWindowGetGadget2:
	moveq	#$00,d1
	moveq	#$00,d2
	move.b	$1d4(a6),d1
	move.b	$1d5(a6),d2
	move.l	d1,d3
	move.l	d2,d4
	add.b	(a0)+,d1
	add.b	(a0)+,d2
	add.b	(a0)+,d3
	add.b	(a0)+,d4
	cmp.w	d0,d1
	bhi	EditWindowGetGadget1
	cmp.w	d3,d0
	bhi	EditWindowGetGadget1
	swap	d0
	cmp.w	d0,d2
	bhi	EditWindowGetGadget1
	cmp.w	d4,d0
	bhi	EditWindowGetGadget1
	move.l	d5,d6
	bra	EditWindowGetGadget4
EditWindowGetGadget3:
	moveq	#$00,d1
	moveq	#$00,d2
	move.b	$1d4(a6),d1
	move.b	$1d5(a6),d2
	add.b	(a0)+,d1
	add.b	(a0)+,d2
	move.w	d1,d3
	subq.w	#1,d1
	addq.w	#1,d3
	cmp.w	d0,d1
	bhi	EditWindowGetGadget1
	cmp.w	d3,d0
	bhi	EditWindowGetGadget1
	swap	d0
	cmp.w	d0,d2
	bne	EditWindowGetGadget1
	move.l	d5,d6
EditWindowGetGadget4:
	move.l	d6,d0
	movem.l	(a7)+,d1-d6/a0-a1
	rts

