; Reset v1.1
; by Kyzer/CSG

	incdir	include:
	include	lvo.i
	include	dos/dosextens.i

Reset	move.l	4.w,a6
	sub.l	a1,a1
	jsr	_LVOFindTask(a6)
	move.l	d0,a4
	moveq	#0,d0
	tst.l	pr_CLI(a4)
	bne.s	.nomsg
	lea	pr_MsgPort(a4),a0
	jsr	_LVOWaitPort(a6)
	lea	pr_MsgPort(a4),a0
	jsr	_LVOGetMsg(a6)
.nomsg	tst.l	d0
	beq.s	.reset
	move.l	d0,-(sp)

	lea	intname(pc),a1
	moveq	#36,d0			; erk! bugfix
	jsr	_LVOOpenLibrary(a6)
	tst.l	d0
	beq.s	.noint
	move.l	d0,a6
	suba.l	a0,a0
	move.l	a2,a3
	suba.l	a2,a2
	lea	ezreq(pc),a1
	jsr	_LVOEasyRequestArgs(a6)
	tst.l	d0
	bne.s	.reset

	move.l	a6,a1
	move.l	4.w,a6
	jsr	_LVOCloseLibrary(a6)
.noint
	move.l	(sp)+,d0
	beq.s	.exit
	move.l	d0,a2
	jsr	_LVOForbid(a6)
	move.l	a2,a1
	jsr	_LVOReplyMsg(a6)
	jsr	_LVOPermit(a6)
.exit	moveq	#0,d0
	rts

.reset	move.l	4.w,a6
	lea	dosname(pc),a1
	moveq	#0,d0
	jsr	_LVOOpenLibrary(a6)
	tst.l	d0
	beq.s	.die
	move.l	d0,a6
	moveq	#30,d1
	jsr	_LVODelay(a6)
	move.l	a6,a1
	move.l	4.w,a6
	jsr	_LVOCloseLibrary(a6)
.die	lea	gfxname(pc),a1
	moveq	#0,d0
	jsr	_LVOOpenLibrary(a6)
	tst.l	d0
	beq.s	.kill
	move.l	d0,a6
	suba.l	a1,a1
	jsr	_LVOLoadView(a6)
	jsr	_LVOWaitTOF(a6)
	jsr	_LVOWaitTOF(a6)
	move.l	a6,a1
	move.l	4.w,a6
	jsr	_LVOCloseLibrary(a6)
.kill	move.w	#$000,$dff180		; blackout *grin* :-)
	move.l	4.w,a6
	jmp	_LVOColdReboot(a6)

ezreq	dc.l	24
	dc.l	0
	dc.l	title
	dc.l	body
	dc.l	resp

intname	dc.b	"intuition.library",0
dosname	dc.b	"dos.library",0
gfxname	dc.b	"graphics.library",0
title	dc.b	"Reset",0
body	dc.b	"This will reset your Amiga!!!",10
	dc.b	"Are you sure you want to go ahead?",0
resp	dc.b	"Reset|Cancel",0

