	Section MainCode,Code

	incdir include:
	include "includes:libs/exec"
	include "includes:libs/graphics"
	include "includes:libs/intuition"
	include "includes:librarymacros"
	include "includes:startend"
	include "include:exec/exec.i"
	include "include:dos/dos.i"
	include "include:graphics/gfxbase.i"
	include "include:graphics/gfx.i"
	include "include:intuition/intuition.i"
	include "include:hardware/dmabits.i"

DMACON equ $96

main:
	OpenLib Graphics
	beq exit
	OpenLib Intuition
	beq exit

	bsr HelloWorld
	bsr WaitMode
	bsr GoodbyeWorld
exit:
	CloseLib Intuition
	CloseLib Graphics
	rts

WaitMode:
	move.l #SIGBREAKF_CTRL_C|SIGBREAKF_CTRL_D|SIGBREAKF_CTRL_E|SIGBREAKF_CTRL_F,d0
	ExecLib Wait
	tst.l d0
	beq WaitMode
	btst #SIGBREAKB_CTRL_C,d0
	bne QuitBlanker
	btst #SIGBREAKB_CTRL_D,d0
	beq NotBlankScreen
	move.l d0,-(a7)
	bsr BlankScreen
	move.l (a7)+,d0

NotBlankScreen:
	btst #SIGBREAKB_CTRL_E,d0
	beq NotUnblankScreen
	move.l d0,-(a7)
	bsr UnblankScreen
	move.l (a7)+,d0

NotUnblankScreen:
	btst #SIGBREAKB_CTRL_F,d0
	beq WaitMode
	bsr PreferencesWindow
	bra WaitMode

QuitBlanker:
	bsr UnblankScreen
	rts

BlankScreen:
	
	tst.w isBlanked
	beq BlankScreen_continue
	rts
BlankScreen_continue:
	move.w #1,isBlanked

	lea $0,a0
	lea ScreenTags,a1
	UseLib Intuition,OpenScreenTagList
	move.l d0,OpenedScreen
	tst.l d0
	beq BlankScreen_fail

	lea $dff000,a5
	move.w #DMAF_SPRITE,DMACON(a5)

BlankScreen_fail:
	rts

UnblankScreen:
	tst.w isBlanked
	bne UnblankScreen_continue
	rts
UnblankScreen_continue:
	move.w #0,isBlanked

	tst.l OpenedScreen
	beq UnblankScreen_surething

	move.l OpenedScreen,a0
	UseLib Intuition,CloseScreen
	move.l #0,OpenedScreen
UnblankScreen_surething:
	lea $dff000,a5
	move.w #$8000+DMAF_SPRITE,DMACON(a5)

	rts





HelloWorld:
	sub.l a1,a1
	ExecLib FindTask
	move.l d0,SigTask
	ExecLib Forbid
	lea PMPortName,a1
	ExecLib FindPort
	tst.l d0
	beq HW_Fail
	move.l d0,PMPort
	move.l #MN_SIZE,d0
	move.l #$10000,d1
	ExecLib AllocMem
	tst.l d0
	beq HW_Fail
	move.l d0,a1
	move.l PMPort,a0
	move.w #MN_SIZE,MN_LENGTH(a1)
	move.l SigTask,LN_NAME(a1)
	ExecLib PutMsg
HW_Fail:
	ExecLib Permit
	rts

GoodbyeWorld:
	ExecLib Forbid
	lea PMPortName,a1
	ExecLib FindPort
	tst.l d0
	beq GW_Fail
	move.l d0,PMPort
	move.l #MN_SIZE,d0
	move.l #$10000,d1
	ExecLib AllocMem
	tst.l d0
	beq GW_Fail
	move.l d0,a1
	move.l PMPort,a0
	move.w #MN_SIZE,MN_LENGTH(a1)
	move.l #0,LN_NAME(a1)
	ExecLib PutMsg
GW_Fail:
	ExecLib Permit
	rts



PreferencesWindow:
	rts

	Section MainData,Data

PMPortName:	dc.b 'PowerManagerBlank',0
	CNOP 0,2
PMPort:	dc.l 0
SigTask:	dc.l 0

Graphics:
	dc.l 0
	dc.b 'graphics.library',0
	CNOP 0,2

Intuition:
	dc.l 0
	dc.b 'intuition.library',0
	CNOP 0,2

isBlanked:	dc.w 0
OpenedScreen:	dc.l 0

ScreenTags:
	dc.l	SA_Width,320
	dc.l	SA_Height,200
	dc.l	SA_Depth,0
	dc.l	SA_Colors,BlankerColorSpec
	dc.l	SA_Type,CUSTOMSCREEN
	dc.l	SA_ShowTitle,0
	dc.l	SA_Quiet,1
	dc.l	SA_Draggable,0
	dc.l	SA_Exclusive,1			;3.0+ don't share display
	dc.l	TAG_END,0

BlankerColorSpec:
	dc.w 0,0,0,0
	dc.w 1,1,1,1
	dc.w 2,2,2,2
	dc.w 3,3,3,3
	dc.w 4,4,4,4
	dc.w 5,5,5,5
	dc.w 6,6,6,6
	dc.w 7,7,7,7
	dc.w 8,8,8,8
	dc.w 9,9,9,9
	dc.w 10,10,10,10
	dc.w 11,11,11,11
	dc.w 12,12,12,12
	dc.w 13,13,13,13
	dc.w 14,14,14,14
	dc.w 15,15,15,15
	dc.w -1
	end
