
*	AddWBplane
*
*	Adds a bitplane to the Workbench screen.
*
*
*HISTORY
*         Made with Hisoft V2.12
*  V1.0   27-Jun-91: First attempt. Works of course

	OPT O+
	OPT O1+		; Tells when a branch could be optimised to short
	OPT i+		; Tells when '#' is probably missing

	incdir		"AsmInc:"
	include		"P.i"
	include		"relMacros.i"
	include		"exec/exec_lib.i"
	include		"libraries/dosextens.i"
	include		"graphics/graphics_lib.i"
	include		"intuition/intuition_lib.i"
	include		"intuition/intuition.i"

Planes		EQUR		D2
Index		EQUR		D3
WScreen		EQUR		A2
WBitMap		EQUR		A3
DB		EQUR		A4

 dcDeclare	A4
 dcAPtr		WBMsg
 dcAPtr		GraphBase
 dcAPtr		IntuiBase
 dcEnd
Start		dcAlloc
		dcReset
		Prepare		Exec_Call
		suba.l		A1,A1
		CallLib		FindTask		; Find us
		movea.l		D0,A2
		tst.l		pr_CLI(A2)
		bne.S		GetLibs
WBStart		lea		pr_MsgPort(A2),A0
		CallLib		WaitPort		; wait for a message
		lea		pr_MsgPort(A2),A0
		CallLib		GetMsg			; then get it
		move.l		D0,WBMsg(DB)		; save it for later reply
GetLibs		lea		GfxName(PC),A1
		CallLib		OldOpenLibrary
		move.l		D0,GraphBase(DB)
		beq		Error
		lea		IntuiName(PC),A1
		CallLib		OldOpenLibrary
		move.l		D0,IntuiBase(DB)
		beq.S		Error
*»»» Find Workbench screen
		CallLib		Forbid
		move.l		IntuiBase(DB),A0
		move.l		ib_FirstScreen(A0),WScreen
1$		move.l		WScreen,D0
		beq.S		3$
		move.w		sc_Flags(WScreen),D0
		andi.w		#SCREENTYPE,D0
		cmpi.w		#WBENCHSCREEN,D0	; Workbench screen ?
		beq.S		2$
		move.l		sc_NextScreen(WScreen),WScreen
		bra.S		1$
*»»» Found Workbench screen
2$		lea		sc_BitMap(WScreen),WBitMap
		moveq		#0,Planes
		move.b		bm_Depth(WBitMap),Planes
		move.w		Planes,Index
		mulu		#4,Index
		addq.w		#1,Planes
		cmp.w		#4,Planes
		bgt.S		3$
		move.w		sc_Width(WScreen),D0
		move.w		sc_Height(WScreen),D1
		Prepare		Gfx_Call
		CallLib		AllocRaster
		move.l		D0,bm_Planes(WBitMap,Index)
		beq.S		3$
		move.l		D0,A1
		move.w		bm_Rows(WBitMap),D0
		swap		D0
		move.w		bm_BytesPerRow(WBitMap),D0
		moveq		#2,D1
		CallLib		BltClear
		move.b		Planes,bm_Depth(WBitMap)
		Prepare		Intuition_Call
		CallLib		RemakeDisplay
3$		Prepare		Exec_Call
		CallLib		Permit

Error
Exit		Prepare		Exec_Call
FreeIntui	move.l		IntuiBase(DB),D0
		beq.S		FreeGfx
		move.l		D0,A1
		CallLib		CloseLibrary
FreeGfx		move.l		GraphBase(DB),D0
		beq.S		ReplyWB
		move.l		D0,A1
		CallLib		CloseLibrary
ReplyWB		move.l		WBMsg(DB),D2
		beq.S		AllDone
		CallLib		Forbid			; We were started from WB
		movea.l		D2,A1
		CallLib		ReplyMsg		; Reply WBMessage
AllDone		dcFree
		moveq		#0,D0
		rts

GfxName		dc.b		'graphics.library',0
IntuiName	dc.b		'intuition.library',0
		END

