*    systemreset.s wersja 1.0 (17-Lis-1999)
*
*    Autor    : Tomasz "Pony van Deathface" Pëczek
*    Assembler : ASM-One version 1.01
*
*    Informacja:Ten kod ûródîowy zostaî doîâczony
*		jako przykîad.Wolno Ci wykorzystywaê
*		schematy w nim zawarte we wîasnych
*		programach, ale nie wolno ci go zmieniaê.
*

		incdir	'DH1:Includy/'			;ôcieûka dostëpu do includów
		include	'SystemReset.i'

		movem.l	d0-a6,-(sp)			;rejestry na stos
		move.l	4.w,a6				;odbieramy wiadomoôê od
		sub.l	a1,a1				;Workbench'a
		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				;otwieramy bibliotekë dos
		lea	dosname,a1
		jsr	_LVOOpenLibrary(a6)
		move.l	d0,dosbase			;jeôli sië nie udaîo 
		beq.w	nodos				;skocz do nodos
		move.l	#38,d0
		lea	reqtoolsname,a1			;otwirema bibliotekë reqtools
		jsr	_LVOOpenLibrary(a6)
		move.l	d0,reqtoolsbase			;jeôli sië nie udaîo
		beq.w	noreqtools			;skocz do noreqtools
		move.l	reqtoolsbase,a6
		move.l	#RT_REQINFO,d0
		move.l	#0,a0				;alokujemy requester
		jsr	_LVOrtAllocRequestA(a6)
		move.l	d0,requesterbase		;jeôli sië nie udaîo 
		beq.w	norequester			;skocz do norequester
Ask:
		move.l	reqtoolsbase,a6
		move.l	requesterbase,a1
		move.l	#REQPOS_CENTERWIN,rtri_ReqPos(a1)
		move.l	#asktitle,rtri_ReqTitle(a1)	;parametry dla naszego requestera
		bset	#CENTERTEXT,rtri_Flags(a1)	;wiem, ûe powinny byê ustawione w
		lea	asktext,a1			;tagliôcie
		lea	askgadget,a2
		move.l	requesterbase,a3		;wyôwietlame requester
		move.l	#0,a4
		move.l	#0,a0
		jsr	_LVOrtEZRequestA(a6)
		tst	d0				;jeôli uûytkownik kliknâî na Resetuj
		bne	Reset				;skaczemy do etykiety Reset
Quit:							;jeôli kliknâî na Zaniechaj
		move.l	requesterbase,a1		;koïczymy
		jsr	_LVOrtFreeRequest(a6)		;zwalniamy requester
		move.l	4.w,a6
		move.l	dosbase,a1			;zamykamy bibliotekë dos
		jsr	_LVOCloseLibrary(a6)
		move.l	reqtoolsbase,a1			;zamykamy bibliotekë reqtools
		jsr	_LVOCloseLibrary(a6)
		tst.l	message				;informyjemy Workbench'a 
		beq.s	exit				;o zakoïczeniu dziaîania 
		move.l	4.w,a6				;programu
		jsr	_LVOForbid(a6)
		move.l	message,a1
		jsr	_LVOReplyMsg(a6)
		jsr	_LVOPermit(a6)
		movem.l	(sp)+,d0-a6			;rejestry ze stosu
exit:		move.l	#0,d0
		rts
Reset:							;tutaj resetujemy
		move.l	requesterbase,a1		;zwalniamy requester
		jsr	_LVOrtFreeRequest(a6)
		move.l	4.w,a6
		move.l	dosbase,a1			;zamykamy bibliotekë dos
		jsr	_LVOCloseLibrary(a6)
		move.l	reqtoolsbase,a1			;zamykamy bibliotekë reqtools
		jsr	_LVOCloseLibrary(a6)
		jsr	_LVOColdReset(a6)		;resetujemy
nodos:							;jeôli nie udaîo sië otworzyê biblioteki dos
		tst.l	message				;informyjemy Workbench'a 
		beq.w	exiterror			;o zakoïczeniu dziaîania 
		move.l	4.w,a6				;programu
		jsr	_LVOForbid(a6)
		move.l	message,a1
		jsr	_LVOReplyMsg(a6)
		jsr	_LVOPermit(a6)
		movem.l	(sp)+,d0-a6			;rejestry ze stosu
		move.l	#20,d0				;i koïczymy
		rts
noreqtools:						;jeôli nie udaîo sië otworzyê biblioteki reqtools
		move.l	dosbase,a6
		move.l	#MODE_NEWFILE,d2		;informujemy o tym uûytkownika
		move.l	#errorwindow,d1
		jsr	_LVOOpen(a6)
		move.l	d0,d1
		move.l	#noreqtoolstext,d2
		move.l	#38,d3
		jsr	_LVOWrite(a6)
		move.l	4.w,a6				;zamykamy bibliotekë dos
		move.l	dosbase,a1
		jsr	_LVOCloseLibrary(a6)
		tst.l	message				;informyjemy Workbench'a 
		beq.w	exiterror			;o zakoïczeniu dziaîania 
		move.l	4.w,a6				;programu
		jsr	_LVOForbid(a6)
		move.l	message,a1
		jsr	_LVOReplyMsg(a6)
		jsr	_LVOPermit(a6)
		movem.l	(sp)+,d0-a6			;rejestry ze stosu
		move.l	#20,d0				;koniec
		rts
norequester:						;jeôli nie udaîo sië zaalokowaê requestera
		move.l	dosbase,a6			;informujemy o tym uûytkownika
		move.l	#MODE_NEWFILE,d2
		move.l	#errorwindow,d1
		jsr	_LVOOpen(a6)
		move.l	d0,d1
		move.l	#norequestertext,d2
		move.l	#28,d3
		jsr	_LVOWrite(a6)
		move.l	4.w,a6				;zamykamy biblliotekë dos
		move.l	dosbase,a1
		jsr	_LVOCloseLibrary(a6)
		move.l	reqtoolsbase,a1			;zamykamy bibliotekë reqtools
		jsr	_LVOCloseLibrary(a6)
		tst.l	message				;informyjemy Workbench'a 
		beq.s	exiterror			;o zakoïczeniu dziaîania 
		move.l	4.w,a6				;programu
		jsr	_LVOForbid(a6)
		move.l	message,a1
		jsr	_LVOReplyMsg(a6)
		jsr	_LVOPermit(a6)
		movem.l	(sp)+,d0-a6			;rejestry ze stosu
exiterror:	move.l	#20,d0				;koniec
		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" Pëczek',0
asktext:	dc.b	'Czy mam zresetowaê Twojâ Amigë ?',0
askgadget:	dc.b	'Resetuj|Zaniechaj',0
errorwindow:	dc.b	'CON:0/0/100/50/Wystâpiî bîâd !!!',0
noreqtoolstext:	dc.b	'Nie mogë otworzyê reqtools.library V38',0
norequestertext:dc.b	'Nie mogë otworzyê requastera',0