*    systemreset.s version 1.0 (17-nov-1999)
*
*    Author    : Tomasz "Pony van Deathface" Peczek
*    Assembler : ASM-One version 1.01
*
*    Note:This source code is added as example.
*	  You aren't allowed to change it and
*	  assemble as your own, but you can use
*	  parts of it in your own program.
*	  One more thing : sorry for my English.
*

		incdir	'DH1:Includy/'			;or wherever you have it
		include	'SystemReset.i'

		movem.l	d0-a6,-(sp)			;registers on stack
		move.l	4.w,a6				;get workbench
		sub.l	a1,a1				;message
		jsr	_LVOFindTask(a6)
		move.l	d0,a4
		tst.l	pr_CLI(a4)
		bne.s	Init
		lea	pr_MsgPort(a4),a0
		jsr	_LVOWaitPort(a6)
		lea	pr_MsgPort(a4),a0
		jsr	_LVOGetMsg(a6)
		move.l	d0,message
Init:
		move.l	4.w,a6
		move.l	#0,d0				;open dos.libray
		lea	dosname,a1
		jsr	_LVOOpenLibrary(a6)
		move.l	d0,dosbase			;if there was error
		beq.w	nodos				;jump to nodos
		move.l	#38,d0
		lea	reqtoolsname,a1			;open reqtools.library
		jsr	_LVOOpenLibrary(a6)
		move.l	d0,reqtoolsbase			;if there was error
		beq.w	noreqtools			;jump to noreqtools
		move.l	reqtoolsbase,a6
		move.l	#RT_REQINFO,d0
		move.l	#0,a0				;alloc  requester
		jsr	_LVOrtAllocRequestA(a6)
		move.l	d0,requesterbase		;if there was error 
		beq.w	norequester			;jump to norequester
Ask:
		move.l	reqtoolsbase,a6
		move.l	requesterbase,a1
		move.l	#REQPOS_CENTERWIN,rtri_ReqPos(a1)
		move.l	#asktitle,rtri_ReqTitle(a1)	;proprietys of our requester
		bset	#CENTERTEXT,rtri_Flags(a1)	;I know then that should be done
		lea	asktext,a1			;in taglist
		lea	askgadget,a2
		move.l	requesterbase,a3		;show the requester
		move.l	#0,a4
		move.l	#0,a0
		jsr	_LVOrtEZRequestA(a6)
		tst	d0				;if user chose Reset
		bne	Reset				;jump to Reset
Quit:							;if user chose Cancel
		move.l	requesterbase,a1		;we quiting
		jsr	_LVOrtFreeRequest(a6)		;free requester
		move.l	4.w,a6
		move.l	dosbase,a1			;close dos.library
		jsr	_LVOCloseLibrary(a6)
		move.l	reqtoolsbase,a1			;close reqtools.library
		jsr	_LVOCloseLibrary(a6)
		tst.l	message				;reply workbench 
		beq.s	exit				;message
		move.l	4.w,a6
		jsr	_LVOForbid(a6)
		move.l	message,a1
		jsr	_LVOReplyMsg(a6)
		jsr	_LVOPermit(a6)
		movem.l	(sp)+,d0-a6			;registers on their places
exit:		move.l	#0,d0
		rts
Reset:							;here we have reset
		move.l	requesterbase,a1		;free requester
		jsr	_LVOrtFreeRequest(a6)
		move.l	4.w,a6
		move.l	dosbase,a1			;close dos.library
		jsr	_LVOCloseLibrary(a6)
		move.l	reqtoolsbase,a1			;close reqtools.library
		jsr	_LVOCloseLibrary(a6)
		jsr	_LVOColdReset(a6)		;reset
nodos:							;if there was error while opening dos.library
		tst.l	message				;reply workbench
		beq.w	exiterror			;message 
		move.l	4.w,a6
		jsr	_LVOForbid(a6)
		move.l	message,a1
		jsr	_LVOReplyMsg(a6)
		jsr	_LVOPermit(a6)
		movem.l	(sp)+,d0-a6			;registers on their places
		move.l	#20,d0				;end
		rts
noreqtools:						;if there was error while opening reqtools.library
		move.l	dosbase,a6
		move.l	#MODE_NEWFILE,d2		;inform the user 
		move.l	#errorwindow,d1
		jsr	_LVOOpen(a6)
		move.l	d0,d1
		move.l	#noreqtoolstext,d2
		move.l	#33,d3
		jsr	_LVOWrite(a6)
		move.l	4.w,a6				;close dos.library
		move.l	dosbase,a1
		jsr	_LVOCloseLibrary(a6)
		tst.l	message				;reply workbench 
		beq.w	exiterror			;message 
		move.l	4.w,a6
		jsr	_LVOForbid(a6)
		move.l	message,a1
		jsr	_LVOReplyMsg(a6)
		jsr	_LVOPermit(a6)
		movem.l	(sp)+,d0-a6			;registers on their places
		move.l	#20,d0				;end
		rts
norequester:						;if there was error while alloc requester
		move.l	dosbase,a6			;inform user
		move.l	#MODE_NEWFILE,d2
		move.l	#errorwindow,d1
		jsr	_LVOOpen(a6)
		move.l	d0,d1
		move.l	#norequestertext,d2
		move.l	#22,d3
		jsr	_LVOWrite(a6)
		move.l	4.w,a6				;close dos.library
		move.l	dosbase,a1
		jsr	_LVOCloseLibrary(a6)
		move.l	reqtoolsbase,a1			;close reqtools.library
		jsr	_LVOCloseLibrary(a6)
		tst.l	message				;reply workbench 
		beq.s	exiterror			;message 
		move.l	4.w,a6
		jsr	_LVOForbid(a6)
		move.l	message,a1
		jsr	_LVOReplyMsg(a6)
		jsr	_LVOPermit(a6)
		movem.l	(sp)+,d0-a6			;registers on their places
exiterror:	move.l	#20,d0				;end
		rts

dosname:	dc.b	'dos.library',0
reqtoolsname:	dc.b	'reqtools.library',0
	even
dosbase:	ds.l	1
reqtoolsbase:	ds.l	1
requesterbase:	ds.l	1
message:	ds.l	1
asktitle:	dc.b	'System Reset by Tomasz "Pony" Peczek',0
asktext:	dc.b	'Shall I reset your Amiga ?',0
askgadget:	dc.b	'Reset|Cancel',0
errorwindow:	dc.b	'CON:0/0/100/50/Init Error !!!',0
noreqtoolstext:	dc.b	'I can`t open reqtools.library V38',0
norequestertext:dc.b	'I can`t open requaster',0