;=============================================================================
;                    Assembler section for UrouHack 1.4+
;
; Patches for the following Functions:
;
;       OpenScreen()
;       OpenScreenTagList()
;       OpenWindow()
;       OpenWindowTagList()
;       CloseScreen()
;=============================================================================

				include intuition/screens.i
				include intuition/intuition_lib.i
				include graphics/graphics_lib.i
				include graphics/rastport.i

				XDEF    _newAGRoutine
				XREF    _oldAGRoutine
				XDEF    _newNMPRoutine
				XREF    _oldNMPRoutine
				XDEF    _newOSRoutine
				XREF    _oldOSRoutine
				XDEF    _newCSRoutine
				XREF    _oldCSRoutine
				XDEF    _newOTLRoutine
				XREF    _oldOTLRoutine
				XDEF    _newOWRoutine
				XREF    _oldOWRoutine
				XDEF    _newOWTLRoutine
				XREF    _oldOWTLRoutine

				XREF    _b_left
				XREF    _b_right
				XREF    _b_top
				XREF    _b_bottom
				XREF    _b_height
				XREF    _b_width
				XREF    _w_bottom
				XREF    _psysi
				XREF    _UtilityBase
				XREF    _IntuitionBase
				XREF    @allocNewPens
				XREF    @changeSize
				XREF    @freeNewPens
				XREF    @AddGListExtra
				XREF    @AddGadgetExtra

_newAGRoutine   movem.l d0-d7/a0-a6,-(sp)
				jsr     @AddGadgetExtra
				movem.l (sp)+,d0-d7/a0-a6

				move.l  a2,-(sp)
				move.l  _oldAGRoutine,a2
				jsr     0(a2)
				move.l  (sp)+,a2
				rts

_newNMPRoutine  rts

_newCSRoutine   jsr     @freeNewPens

				move.l  a2,-(sp)
				move.l  _oldCSRoutine,a2
				jsr     0(a2)
				move.l  (sp)+,a2
				rts

_newOSRoutine   move.l  _oldOSRoutine,d0
				bra.s   shared

_newOTLRoutine  move.l  _oldOTLRoutine,d0

shared          move.l  a2,-(sp)

				move.l  d0,a2
				jsr     0(a2)
				move.l  d0,a2

				jsr     @allocNewPens

				tst.w   _psysi
				beq.s   nosysi

				move.b  _b_bottom,d0
				move.b  d0,sc_WBorBottom(a2)

				move.b  _b_right,d0
				move.b  d0,sc_WBorRight(a2)

				move.b  _b_top,d0
				move.b  d0,sc_WBorTop(a2)

				move.b  _b_left,d0
				move.b  d0,sc_WBorLeft(a2)

nosysi          move.l  a2,d0
				move.l  (sp)+,a2
				rts

_newOWRoutine   move.l  _oldOWRoutine,d0
				bra.s   shared1

_newOWTLRoutine movem.l d1-d7/a0-a7,-(sp)
				jsr     @changeSize         
				movem.l (sp)+,d1-d7/a0-a7
				move.l  _oldOWTLRoutine,d0
				
shared1         move.l  a2,-(sp)

				move.l  d0,a2
				jsr     0(a2)
				move.l  d0,a2

				move.l  wd_Flags(a2),d1

				moveq   #1,d0
				and.l   d1,d0
				beq.s   noAdjust

				moveq   #$20,d0
				and.l   d1,d0
				beq.s   checkRight

				tst.b   wd_BorderBottom(a2)
				beq.s   checkRight
				move.b  _b_height,wd_BorderBottom(a2)

checkRight      moveq   #$10,d0
				and.l   d1,d0
				beq.s   checkRefresh

				tst.b   wd_BorderRight(a2)
				beq.s   checkRefresh
				move.b  _b_width,wd_BorderRight(a2)

checkRefresh    moveq   #$30,d0
				and.l   d1,d0
				beq.s   noAdjust

				move.l  a2,a0
				jsr     _LVORefreshWindowFrame(a6)

noAdjust        move.l  a2,d0
				move.l  (sp)+,a2
				rts

				end
