*:ts=16
	section	VertB,code

	include	"exec/types.i"
	include	"exec/stack.i"
	include	"exec/execbase.i"
	include	"exec/lists.i"
	include	"exec/tasks.i"
	include	"adef.i"

	xdef	_VertBServer,_SetBase
	xdef	_SetOldCloseWB,_GetOldCloseWB
	xdef	_SetOldOpenWB,_GetOldOpenWB
	xdef	_WB_BASE_PTR
	xdef	_Old_OpenWB,_Old_CloseWB
	xref	_Update


_SetBase	move.l	4(sp),_WB_BASE_PTR
	rts
_SetOldOpenWB	move.l	4(sp),_Old_OpenWB
	rts
_SetOldCloseWB	move.l	4(sp),_Old_CloseWB
	rts

_GetOldOpenWB	move.l	_Old_OpenWB,d0
	rts
_GetOldCloseWB	move.l	_Old_CloseWB,d0
	rts

_VertBServer
	tst.b	WD_s_int(a1)
	beq	next_it
	moveq.l	#0,d0
	move.l	4.w,a0
	move.l	LH_HEAD+TaskReady(a0),a0
	subq.w	#1,d0
loop:
	SUCC	a0,a0
	move.l	a0,d1
	dbeq	d0,loop
endcount
	neg.w	d0
	subq.w	#1,d0
	move.l	4,a0
	move.l	ThisTask(a0),a0
	move.l	a0,d1
	beq	nonew
	cmp.b	#TS_RUN,TC_STATE(a0)
	bne	nonew
	addq.w	#1,d0
nonew
	move.l	4.w,a0
	moveq.l	#1,d1
	add.l	d1,WD_Count_CNT(a1)
	add.l	d0,WD_Ready_CNT(a1)
	sub.w	d1,WD_cnt(a1)
	bpl	next_it
	move.w	WD_End_CNT(a1),WD_cnt(a1)
	tst.b	WD_s_rast(a1)
	bne	next_it
	move.l	a1,-(sp)
	jsr	_Update
	addq.l	#4,sp
next_it
	moveq.l	#0,d0
	rts

	xdef	_NewClose
	xdef	_Old_CloseWB
	xdef	_Old_OpenWB


_NewClose
	movem.l	d0-d7/a0-a6,-(sp)
    	move.l  	_WB_BASE_PTR(PC),a2       
	move.l	WD_close(a2),a0
	move.l	a0,d0
	beq	noclose
	move.l	a2,-(sp)
	jsr	(a0)
	addq.l	#4,sp
noclose
	movem.l	(sp)+,d0-d7/a0-a6
	move.l	_Old_CloseWB(PC),a0
	jsr	(a0)
	tst.l	d0
	bne	noreopen
	movem.l	d0-d7/a0-a6,-(sp)
                move.l          _WB_BASE_PTR(PC),a2   
                move.l          WD_open(a2),a0        
                move.l          a0,d0                 
                beq             nosetreopen                
                move.l          a2,-(sp)              
                jsr             (a0)                  
                addq.l          #4,sp
nosetreopen
	movem.l	(sp)+,d0-d7/a0-a6
noreopen	rts

_WB_BASE_PTR	dc.l	0
_Old_CloseWB	dc.l	0
_Old_OpenWB	dc.l	0

	xdef	_NewOpen
_NewOpen
    	move.l  	_Old_OpenWB(PC),a0  
    	jsr	(a0)
	tst.l	d0
	beq	noallopen
    	movem.l 	d0-d7/a0-a6,-(sp)
    	move.l  	_WB_BASE_PTR(PC),a2       
    	move.l  	WD_open(a2),a0  
    	move.l  	a0,d0            
    	beq     	noopen
    	move.l  	a2,-(sp)         
    	jsr     	(a0)             
    	addq.l  	#4,sp         
noopen
	movem.l 	(sp)+,d0-d7/a0-a6
noallopen
	rts



AreaMove	equ	-$fc
AreaDraw	equ	-$102
AreaEnd	equ	-$108
Move	equ	-$f0
Draw	equ	-$f6
WritePixel	equ	-$144
SetAPen	equ	-$156
RectFill	equ	-$132

	xdef	_CalcShift
_CalcShift
	move.l	4(sp),d0
	swap	d0
	ext.l	d0
	rts

	xdef	_FindMaxValue
*	FindMaxValue	(struct WIN_DEF	*wd)
_FindMaxValue	
	move.l	4(sp),a0
	moveq.l	#0,d0
	move.w	WD_buffer_size(a0),d1
	subq.w	#1,d1
	bmi	end_find_loop
	move.l	WD_buffer(a0),a0
find_loop
	cmp.l	(a0)+,d0
	bge	no_new_find_value
	move.l	-4(a0),d0
no_new_find_value
	dbra	d1,find_loop
end_find_loop
	rts

	section	ALoadData,data

	include	"intuition/intuition.i"

	xdef	_WinTagList
	xdef	_SizeFlag
	xdef	_IDCMPFlags
	xdef	_WIN_XPOS,_WIN_YPOS
	xdef	_WIN_WIDTH,_WIN_HEIGHT
	xdef	_TitlePtr

FALSE	equ	0
TRUE	equ	-1

_WinTagList	dc.l	WA_SizeGadget
_SizeFlag	dc.l	FALSE
	dc.l	WA_DragBar
	dc.l	TRUE
	dc.l	WA_DepthGadget
	dc.l	TRUE
	dc.l	WA_CloseGadget
	dc.l	TRUE
	dc.l	WA_AutoAdjust
	dc.l	TRUE
	dc.l	WA_IDCMP
_IDCMPFlags	dc.l	IDCMP_CLOSEWINDOW
	dc.l	WA_Title
_TitlePtr	dc.l	0
	dc.l	WA_Top
_WIN_YPOS	dc.l	0
	dc.l	WA_Left
_WIN_XPOS	dc.l	0
	dc.l	WA_Width
_WIN_WIDTH	dc.l	256
	dc.l	WA_Height
_WIN_HEIGHT	dc.l	64
	dc.l	WA_DetailPen
	dc.l	0
	dc.l	WA_BlockPen
	dc.l	1
	dc.l	WA_MinWidth
	dc.l	44
	dc.l	WA_MinHeight
	dc.l	32
	dc.l	WA_MaxWidth
	dc.l	1400
	dc.l	WA_MaxHeight
	dc.l	600
	dc.l	TAG_DONE
	dc.l	0

	end

