;========================================================================
;= Big Brother V3.12 by Orega Holland (c)1992 			    	=
;= Programmer: EA van Breemen					    	=
;= Assembler : DevPac 2.14                                          	=
;= All copyrights are reserved by Orega Holland.  		    	=
;= No part of this program may be used for other commercial programs	=
;= without the prior written permission of the author. The author   	=
;= cannot be held responsible for behaviour of this program due to  	=
;= the use of this program. BigBrother is SHAREWARE. This means it  	=
;= can be copied for non-commercial use and it may not be copied as	=
;= a part of a commercial package. 					=
;========================================================================

;========================================================================
;= Modifications:						    	=
;= 24-1-90:   fixed ctrl-Help bug				    	=
;=            added newcli					    	=
;=            optimized coding					    	=
;= 26-1-90:   added newcli gadget				    	=
;=            modified tekstborder				    	=
;=            fixed 'system has been modified' tekst bug	    	=
;= 27-1-90:   fixed AlertWarning				    	=
;=            adjusted some windowsizes				    	=
;=            intuified viewbootblocktekst			    	=
;=            regulated bootio errors				    	=
;=            added help					    	=
;=            added preferences					    	=
;= 21-10-90   fixed the memory clean message update bug             	=
;=            added script options                                  	=	 
;= 23-10-90   make auto detaching				    	=
;= 24-10-90   fixed another clean message box bug		    	=
;=	      added ReBoot routine				    	=  	 
;= 25-10-90   BigBrother is now using the official reboot           	=
;= 27-10-90   Fixed the endcli bug				    	=
;= 01-12-90   Fixed multiple selection bug. BB replies to all       	=
;=            messages first before next Wait			    	=
;=            Version 2.11 Final release.                           	=	 
;= 16-10-91   Version 3.00					    	=
;= 23-10-91   Version 3.01					    	=
;=            Gadgets 2.0 look					    	=
;= 24-10-91   All Arp stuff removed! (everyone may make mistakes)   	=					    =
;=	      Nocare patch installed.				    	=
;=            Mouse accelerator	added.				    	=
;=            V3.02						    	=
;= 04-11-91   V3.05  Now using Signals for faster response	    	=
;=	      Added check.task					    	=
;= 05-11-91   Preferences installed				    	=
;=            Function macros can be disabled (for WP etc.)	    	=
;=	      Code optimized (pc-rel)				    	=
;=            V3.07						    	=
;= 07-11-91   Beta release of BigBrother. V3.09				=
;= 07-12-91   Kickstart 2.0 RomBase bug removed				=
;=	      2.0 Font bug removed. V3.11				=					=
;= 01-02-92   Fixed big_prefs update bug				=
;=	      added version string					=
;========================================================================
	

XLIB	macro
	xref	_LVO\1
	endm


MEMORY		equ	$1
VIEW		equ	$2
CLEAR		equ	$3
INSTALL		equ	$4
DRIVE		equ	$5
WATCH		equ	$6
NEWSHELL	equ	$7
PREFS		equ	$8
REBOOT		equ	$9
NOCARE		equ	$a
MOUSEACC	equ	$b
FUNCTIONKEYS	equ	$c
SAVE		equ	$d
USE		equ	$e
CANCEL		equ	$f

READ		equ	$2
WRITE		equ	$3

DIE		equ	0
STAY		equ	1


IECLASS_RAWKEY		equ	$01
IECLASS_RAWMOUSE	equ	$02
ie_X			equ	$A
ie_Y			equ	$C
IEQUALIFIER_CONTROL 	equ	$08

HELP_KEY		equ	$5f
FUNC_F1			equ	$50
FUNC_F2			equ	$51
FUNC_F3			equ	$52
FUNC_F4			equ	$53
FUNC_F5			equ	$54
FUNC_F6			equ	$55
FUNC_F7			equ	$56
FUNC_F8			equ	$57
FUNC_F9			equ	$58
FUNC_F10		equ	$59



IND_ADDHANDLER		equ	$09
IND_REMHANDLER		equ	$a
NT_MESSAGE		equ	$05
NT_MSGPORT		equ	$04
NT_TASK			equ	$01
PA_SIGNAL		equ	$00
TC_SIZE			equ	$5C
TC_SPLOWER		equ	$3A
TC_SPREG		equ	$36
TC_SPUPPER		equ	$3E
MEMF_CHIP		equ	$2
MEMF_CLEAR		equ	$10000
MEMF_PUBLIC		equ	$1
io_Message		equ	$00
io_Data			equ	$28
io_Command		equ	$1c
Ln_Type			equ	$08
Ln_Name			equ	$0a
Ln_Pri			equ	$09
mp_Size			equ	$22
mp_Node			equ	$00
mp_SigBit		equ	$0f
mp_Flags		equ	$0e
mp_SigTask		equ	$10
mn_Node			equ	$00
mn_Length		equ	$12
mn_ReplyPort		equ	$0e

gg_GadgetID		equ	$26

im_Class		equ	$14
im_Code			equ	$18
im_Address		equ	$1c

GadgetID		equ	$26

wd_UserPort		equ	$56
wd_RPort		equ	$32

WindowPtr		equ	$b8

nw_Flags		equ	$0e
nw_Type			equ	$2e

is_Code			equ	$12
is_Data			equ	$0e
is_Node			equ	$00

GADGETUP		equ	$40
GADGHNONE		equ	$03
GADGHIMAGE		equ	$02
GADGHCOMP		equ	0
SELECTED		equ	$80
CLOSEWINDOW		equ	$200
RAWKEY			equ	$400
WINDOWDRAG		equ	$02
WINDOWDEPTH		equ	$04
WINDOWCLOSE		equ	$08
ACTIVATE		equ	$1000
NOCAREREFRESH		equ	$20000
RELVERIFY		equ	$01
BOOLGADGET		equ	$01
TOGGLESELECT		equ	$100
RP_JAM1			equ	$00
RP_JAM2			equ	$01
TOPAZ_EIGHTY		equ	$8

TD_CHANGESTATE		equ	14

NULL			equ	$00

NOCARE_PATCH		equ	$01
MOUSE_PATCH		equ	$02
FUNCTION_PATCH		equ	$04
REFRESHBIT0		equ	$06
WBENCHSCREEN		equ	$01
	
ROM_BASE	equ	$f80000		; Start of Kickstart 2.0

MAGIC_ROMEND	    EQU $01000000   ;End of Kickstart ROM
MAGIC_SIZEOFFSET    EQU -$14	    ;Offset from end of ROM to Kickstart size
V36_EXEC	    EQU 36	    ;Exec with the ColdReboot() function
TEMP_ColdReboot     EQU -726	    ;Offset of the V36 ColdReboot function
LIB_VERSION	EQU	$14


	XLIB	OpenLibrary
	XLIB	CloseLibrary
	XLIB	OpenDevice
	XLIB	CloseDevice
	XLIB	OpenWindow
	XLIB	CloseWindow
	XLIB	CreateProc
	XLIB	UnLoadSeg
	XLIB	AddTask
	XLIB	Permit
	XLIB	Forbid
	XLIB	DoIO
	XLIB	Delay
	XLIB	GetMsg
	XLIB	ReplyMsg
	XLIB	AllocSignal
	XLIB	FreeSignal
	XLIB	Signal
	XLIB	FindTask
	XLIB	AddPort
	XLIB	RemPort
	XLIB	FindName
	XLIB	DeviceProc
	XLIB	RefreshGadgets
	XLIB	Wait
	XLIB	Move
	XLIB	Text
	XLIB	SetAPen
	XLIB	AllocMem
	XLIB	FreeMem
	XLIB	SetWindowTitles
	XLIB	FindResident
	XLIB	RemTask
	XLIB	DisplayBeep
	XLIB	Disable
	XLIB	Enable
	XLIB	DrawBorder
	XLIB	PrintIText
	XLIB	WBenchToFront
	XLIB	DisplayAlert
	XLIB	SizeWindow
	XLIB	WaitPort
	XLIB	Open
	XLIB	Close
	XLIB	Read
	XLIB	Lock
	XLIB	UnLock
	XLIB	Execute
	XLIB	WaitPort
	XLIB	Supervisor	
	XLIB	Write
	XLIB	Output
	XLIB	SetFunction

STACK_SIZE	equ	4096



;===================================
;= Startup code for auto detaching =
;= BigBrother V2.11                =
;===================================

	
	section	"Startup",code


start	bra.s	1$
	dc.b	'$VER: BigBrother V3.12 (1-2-1992)',$a,$d,0
	even
1$	move.l	($4).L,a6
	sub.l	a1,a1
	jsr	_LVOFindTask(a6)
	move.l	d0,a4
	tst.l	$ac(a4)			; Are we from the WBench ????
	bne.s	from_cli
	lea.l	$5c(a4),a0
	jsr	_LVOWaitPort(a6)
	jsr	_LVOGetMsg(a6)		; Get message
from_cli:
	move.l	($4).L,a6
	lea.l	DosName,a1
	clr.l	d0
	jsr	_LVOOpenLibrary(a6)
	move.l	d0,a5
	beq	uit
	move.l	#BIG_NAME,a1
	jsr	_LVOFindTask(a6)
	tst.l	d0
	bne	already_active
	move.l	a5,a6
	jsr	_LVOOutput(a6)
	move.l	d0,d1
	move.l	#Title,d2
	move.l	#Title_Size,d3
	jsr	_LVOWrite(a6)
	move.l	#NIL_NAME,d1
	move.l	#1006,d2
	jsr	_LVOOpen(a6)
	move.l	d0,pcb_Input
	move.l	d0,pcb_Output

	move.l	#mymain,d3
	sub.l	#4,d3
	lsr.l	#2,d3			; make BPTR !!!!!!
        move.l  #BIG_NAME,d1
        move.l  #2,d2			; pri 2
        move.l  #4096,d4
        jsr	_LVOCreateProc(a5)

	lea.l	start(pc),a0
	move.l	#0,-4(a0)		; Erase pointer to next segment
	bra.s	cc1	

already_active:
	move.l	a5,a6
	jsr	_LVOOutput(a6)
	move.l	d0,d1
	move.l	#Active_Title,d2
	move.l	#Active_Size,d3
	jsr	_LVOWrite(a6)
	
cc1	move.l	a5,a1
	move.l	($4).L,a6
	jsr	_LVOCloseLibrary(a6)
uit	rts


;======================================
;= The Message Create Port function   =
;= a0 contains pointer to name        =
;= d0 contains priority               =
;= on exit:                           =
;= d0 contains pointer to messageport =
;= or 0 if failed                     =
;= All registers are affected         =
;======================================


CreatePort:
	move.l	a0,a5
	move.l	d0,d6
	bsr.s	GetSignal
	cmp.l	#-1,d0
	bne.s	cr_1
create_out:
	moveq	#0,d0
	rts
cr_1	move.l	d0,d4
	move.l	#mp_Size,d0
	move.l	#MEMF_CLEAR|MEMF_PUBLIC,d1
	jsr	_LVOAllocMem(a6)
	move.l	d0,d5
	bne.s	2$
	move.l	d4,d0
	jsr	_LVOFreeSignal(a6)
	bra.s	create_out
2$	move.l	d5,a0
	move.b	d4,mp_SigBit(a0)
	move.b	d6,mp_Node+Ln_Pri(a0)
	move.b	#NT_MSGPORT,mp_Node+Ln_Type(a0)
	move.l	a5,mp_Node+Ln_Name(a0)
	move.b	#PA_SIGNAL,mp_Flags(a0)
	sub.l	a1,a1
	jsr	_LVOFindTask(a6)
	move.l  d0,mp_SigTask(a0)
	move.l	a0,a1
	jsr	_LVOAddPort(a6)
	move.l	d5,d0
	rts


;=================================
;= Get a signal for current task =
;= Assumes it will succeed.      =
;= mask will be in d1            =
;=================================

GetSignal:
	move.l	$4,a6
	moveq	#-1,d0		
	jsr	_LVOAllocSignal(a6)
	moveq	#1,d1
	lsl.l	d0,d1
	rts


;========================================
;= Section containing the resident code =
;========================================

	Section "Main",code

;=======================================
;= Initialisation code for Big Brother =
;=======================================
mymain	move.l	($4).L,a6
	lea.l	DosName(pc),a1
	clr.l	d0
	jsr	_LVOOpenLibrary(a6)
	move.l	d0,DOSBase
	beq	nodos
	bsr	loadprefs
	move.l	($4).L,a6
	clr.l	d0
	lea.l	IntuitionName(pc),a1
	jsr	_LVOOpenLibrary(a6)
	move.l	d0,IntuitionBase
	beq	nointuition
	clr.l	d0
	lea.l	GraphicsName(pc),a1
	jsr	_LVOOpenLibrary(a6)
	move.l	d0,GfxBase
	beq	nographics

	bsr	initall			; Open inputdevice etc.
	bra	check			; Jump to checkroutine
	

;==================================
;= loadprefs: tries to load prefs =
;==================================
loadprefs:
	move.l	DOSBase(pc),a6
	move.l	#prefs_file,d1
	move.l	#-2,d2
	jsr	_LVOLock(a6)
	move.l	d0,lock
	beq	no_prefs
	move.l	#prefs_file,d1
	move.l	#1005,d2
	jsr	_LVOOpen(a6)
	move.l	d0,filehandle
	move.l	d0,d1
	move.l	#DoIOVector,d2
	moveq	#9,d3
	jsr	_LVORead(a6)
	move.l	d0,d5
	move.l	filehandle,d1
	jsr	_LVOClose(a6)
	move.l	lock,d1
	jsr	_LVOUnLock(a6)
	cmp.l	#9,d5
	bne.s	no_prefs	; Read Error has occured !
	bsr	reflect		; Update gadget flags
	rts
no_prefs:
	bsr	Saddam
	move.b	#MOUSE_PATCH|FUNCTION_PATCH|NOCARE_PATCH,patchstatus
save_prefs:
	move.l	DOSBase(pc),a6
	move.l	#prefs_file,d1
	move.l	#1006,d2
	jsr	_LVOOpen(a6)
	move.l	d0,filehandle
	move.l	d0,d1
	move.l	#DoIOVector,d2
	moveq	#9,d3
	jsr	_LVOWrite(a6)
	move.l	filehandle,d1
	jsr	_LVOClose(a6)
	rts
	

;=============================================
;= Routine to install a input device handler =
;=============================================


initall:					; Open inputdevice
	move.b	#0,signal
	move.l	#0,oldopenwindow
	move.b	#0,drive			; df0: is default
	move.b	#STAY,status
	bsr	nocare				; install nocare patch


	lea.l	MyPortName(pc),a0
	moveq	#0,d0
	jsr	CreatePort
	move.l	d0,InputDevPort

	sub.l	a1,a1
	jsr	_LVOFindTask(a6)
	move.l	d0,a3
	move.l	d0,bigtask		; Store big task
	move.l	#-1,WindowPtr(a3)	; I don't want requesters

	lea.l	InputRequestBlock(pc),a0
	move.b	#NT_MESSAGE,io_Message+mn_Node+Ln_Type(a0)
	move.w	#$30,io_Message+mn_Length(a0)
	move.l	InputDevPort(pc),io_Message+mn_ReplyPort(a0)

	lea.l	HandlerStuff(pc),a1
	move.l	#myhandler,is_Code(a1)
	move.b	#127,is_Node+Ln_Pri(a1)
	move.l	#0,is_Data(a1)
	
	lea.l	InputRequestBlock(pc),a1
	lea.l	InputDeviceName(pc),a0
	clr.l	d0
	clr.l	d1
	jsr	_LVOOpenDevice(a6)

	lea.l	InputRequestBlock(pc),a0
	move.w	#IND_ADDHANDLER,io_Command(a0)
	move.l	#HandlerStuff,io_Data(a0)
	move.l	a0,a1
	jsr	_LVODoIO(a6)		; Install handler

	jsr	GetSignal		; Allocate Signal for activation
	move.l	d1,virusmask

	jsr	GetSignal		; Allocate Signal for activation
	move.l	d1,keymask
	
	move.l	#TC_SIZE,d0
	move.l	#MEMF_CLEAR|MEMF_PUBLIC,d1
	jsr	_LVOAllocMem(a6)
	move.l	d0,checktask
	
	move.l	d0,a0
	lea.l	stack(pc),a1
	move.l	a1,TC_SPLOWER(a0)
	move.l	a1,d1
	add.l	#1024,d1
	move.l	d1,TC_SPUPPER(a0)
	move.l	d1,TC_SPREG(a0)
	move.b	#NT_TASK,Ln_Type(a0)
	move.b	#-1,Ln_Pri(a0)
	move.l	#CHECK_NAME,Ln_Name(a0)

	move.l	a0,a1
	move.l	#NewCheck,a2
	move.l	#0,a3
	jsr	_LVOAddTask(a6)

	rts
	
;================================
;= Code for Nocare window patch =
;================================

nocare:
	move.l	oldopenwindow,d0
	bne	1$			; Patch already installed
	move.l	($4).L,a6
	move.l	IntuitionBase(pc),a1
	move.w	#_LVOOpenWindow,a0
	lea.l	newopenwindow(pc),a2
	move.l	a2,d0
	jsr	_LVOSetFunction(a6)
	move.l	d0,oldopenwindow
1$	rts

nocare_off:				; Disable
	move.l	($4).L,a6
	move.l	IntuitionBase(pc),a1
	move.w	#_LVOOpenWindow,a0
	move.l	oldopenwindow,d0
	beq	1$			; not yet installed
	jsr	_LVOSetFunction(a6)
	move.l	#0,oldopenwindow
1$	rts

;=======================
;= Actual Nocare patch =
;=======================
newopenwindow:
	cmp.w	#WBENCHSCREEN,nw_Type(a0)
	bne.s	dontchange
	move.l	nw_Flags(a0),d0
	bclr	#REFRESHBIT0,d0
	move.l	d0,nw_Flags(a0)
dontchange:
	move.l	oldopenwindow(pc),a1
	jmp	(a1)			; Jump to original code.



;=======================
;= Code for Check Task =
;=======================

NewCheck:
	bsr.s	chlus			; Check routine
	cmp.b	#DIE,status
	beq.s	killme
	bra.s	NewCheck
killme	move.l	#0,a1
	move.l	$4,a6
	jsr	_LVORemTask(a6)
	rts				; Should never get here...


chlus	move.l	($4).L,a0
	move.l	a0,a6
	clr.l	d2
	tst.l	42(a0)
	beq.s	1$
	ori.l	#1,d2
1$	tst.l	46(a0)
	beq.s	2$
	ori.l	#1,d2
2$	tst.l	546(a0)
	beq.s	3$
	ori.l	#2,d2
3$	tst.l	550(a0)
	beq.s	4$
	ori.l	#2,d2
4$	lea.l	350(a0),a0
	lea.l	devicename(pc),a1
	move.l	($4).L,a6	
 	jsr	_LVOFindName(a6)
	move.l	d0,a0
	move.l	-28(a0),d1
	cmp.l	#ROM_BASE,d1
	bhs.s	5$
	ori.l	#8,d2
5$	move.l	($4).L,a0
	move.l	-454(a0),d1
	cmp.l	DoIOVector,d1
	beq.s	6$
	ori.l	#4,d2
6$	lea.l	TaskName(pc),a1
	jsr	_LVOFindTask(a6)
	tst.l	d0
	beq.s	7$
	ori.l	#16,d2
7$	andi.l	#31,d2
	move.l	d2,memorymask
	moveq	#0,d0
	lea.l	expert(pc),a0
	move.b	0(a0,d2),d0
	cmp.b	#0,d0
	beq.s	novirus
	cmp.b	#2,d0
	beq.s	novirus
	move.b	d0,signal
	move.l	($4).L,a6
	move.l	virusmask,d0
	move.l	bigtask,a1
	jsr	_LVOSignal(a6)	; Signal Big Brother
novirus
	rts
	
		
;======================================================
;= The Input Device Handler for checking the Help Key =
;======================================================

myhandler			; The input_handler
	cmp.b	#IECLASS_RAWMOUSE,4(a0)
	bsr	mouseacc
	cmp.b	#IECLASS_RAWKEY,4(a0)
	beq.s	akey
noop	move.l	a0,d0		; Return head of list
	rts
akey	move.w	8(a0),d0
	and.w	#IEQUALIFIER_CONTROL,d0		; Mask Control bit
	beq.s	noop				; None of my keys
	cmp.w	#HELP_KEY,6(a0)
	bne.s	1$		; Check next key
	move.w	#HELP_KEY,keyfound
	bra	needed
1$	btst	#2,patchstatus(pc)
	beq.s	noop			; Function keys are disabled
	cmp.w	#FUNC_F1,6(a0)
	bne.s	2$
	move.w	#FUNC_F1,keyfound
	bra	needed
2$	cmp.w	#FUNC_F2,6(a0)
	bne.s	3$
	move.w	#FUNC_F2,keyfound
	bra	needed
3$	cmp.w	#FUNC_F3,6(a0)
	bne.s	4$
	move.w	#FUNC_F3,keyfound
	bra	needed
4$	cmp.w	#FUNC_F4,6(a0)
	bne.s	5$
	move.w	#FUNC_F4,keyfound
	bra	needed
5$	cmp.w	#FUNC_F5,6(a0)
	bne.s	6$
	move.w	#FUNC_F5,keyfound
	bra	needed
6$	cmp.w	#FUNC_F6,6(a0)
	bne.s	7$
	move.w	#FUNC_F6,keyfound
	bra	needed
7$	cmp.w	#FUNC_F7,6(a0)
	bne.s	8$
	move.w	#FUNC_F7,keyfound
	bra	needed
8$	cmp.w	#FUNC_F8,6(a0)
	bne.s	9$
	move.w	#FUNC_F8,keyfound
	bra	needed
9$	cmp.w	#FUNC_F9,6(a0)
	bne.s	10$
	move.w	#FUNC_F9,keyfound
	bra	needed
10$	cmp.w	#FUNC_F10,6(a0)
	bne	noop
	move.w	#FUNC_F10,keyfound
needed	movem.l	d0-d6/a0-a6,-(sp)
	move.l	($4).L,a6
	move.l	keymask,d0
	move.l	bigtask,a1
	jsr	_LVOSignal(a6)	; Signal Big Brother
	movem.l	(sp)+,d0-d6/a0-a6
	move.l	(a0),a0
	cmp.l	#0,a0
	beq.s	out
	bra	myhandler	; Process more events !
out	clr.l	d0		; End of chain
	rts

;==============================
;= A simple mouse accelerator =
;==============================

mouseacc:
	btst.b	#1,patchstatus(pc)
	bne.s	3$
	rts
3$	cmp.w	#1,acc
	bne.s	1$
	rts
1$	movem.l	d2-d6,-(a7)	
	move.w	acc,d3
	move.w	#1,d2
	move.w	ie_X(a0),d1
	bpl.s	2$
	neg.w	d1
	move.w	#-1,d2
2$	cmp.w	#0,d1
	bls	sk1
	sub.w	#1,d1
	mulu.w	d3,d1
	add.w	#1,d1
	mulu.w	d2,d1
	move.w	d1,ie_X(a0)

sk1	move.w	#1,d2
	move.w	ie_Y(a0),d1
	bpl.s	3$
	neg.w	d1
	move.w	#-1,d2
3$	cmp.w	#0,d1
	bls	sk2
	sub.w	#1,d1
	mulu.w	d3,d1
	add.w	#1,d1
	mulu.w	d2,d1
	move.w	d1,ie_Y(a0)
sk2	movem.l (a7)+,d2-d6
	rts



;====================================
;=    Code for checking the Amiga   =
;====================================

check	move.l	($4).L,a6
	move.l	virusmask,d0
	or.l	keymask,d0
	jsr	_LVOWait(a6)		; Wait for signal
	move.l	d0,d1
	and.l	virusmask,d0
	beq.s	no_virus_signal
	clr.l	d0		; must be a virus
	move.b	signal,d0
	beq.s	check
	cmp.b	#2,d0
	beq.s	check
	bra.s	activate	; Open window etc., a virus !!!
no_virus_signal:
	move.w	keyfound(pc),d0
	cmp.w	#FUNC_F1,d0
	bne.s	1$
	bsr	newcli
1$	cmp.w	#HELP_KEY,d0
	beq.s	activate
	bsr	do_function_keys
	bra.s	check

;=========================================================
;= Routine for the window processing in case of an event =
;=========================================================

activate
	move.l	IntuitionBase(pc),a6
	jsr	_LVOWBenchToFront(a6)
	move.l	#NewWindowStructure1,a0
	jsr	_LVOOpenWindow(a6)
	move.l	d0,window
	move.l	d0,a0
	move.l	wd_RPort(a0),rp
	move.l	rp,a0
	move.l	#Border2,a1
	moveq	#0,d0
	moveq	#0,d1
	jsr	_LVODrawBorder(a6)	
	bsr	printstatus
waitloop:
	move.l	window(pc),a0
	move.l	wd_UserPort(a0),a0
	move.l	a0,userport
	moveq	#0,d1
	move.b	mp_SigBit(a0),d1
	moveq	#1,d0
	asl.l	d1,d0
	move.l	($4).L,a6
	jsr	_LVOWait(a6)	; Wait for an event
look	move.l	($4).L,a6
	move.l	userport,a0	; Get UserPort
	jsr	_LVOGetMsg(a6)	; Get Message from IDCMP Port
	tst.l	d0
	beq	waitloop	; No more messages left
	move.l	d0,a1
	move.l	im_Class(a1),d4
	move.w	im_Code(a1),d5
	move.l	im_Address(a1),a2
	jsr	_LVOReplyMsg(a6) ; Reply the message

	cmp.l	#RAWKEY,d4
	bne.s	1$
	cmp.w	#HELP_KEY,d5
	bne.s	1$
	bsr	showhelp
	bra	look
1$	cmp.l	#CLOSEWINDOW,d4
	beq.s	closealldown
	cmp.l	#GADGETUP,d4
	bne.s	look

	bsr.s	process_gadgets	; Someone has pressed a gadget
	cmp.w	#WATCH,d0
	bne.s	look

watchmode:
	move.l	IntuitionBase(pc),a6
	move.l	window(pc),a0
	jsr	_LVOCloseWindow(a6)
	move.b	#0,signal
	bra	check

closealldown:
	bsr	yesno3				; Want to quit???
	tst.l	d0
	beq	look				; no way
	move.l	IntuitionBase(pc),a6
	move.l	window(pc),a0
	jsr	_LVOCloseWindow(a6)
	move.b	#0,signal
	jmp	exit

Saddam	move.l	($4).L,a6
	move.l	-454(a6),DoIOVector
	lea.l	350(a6),a0
	lea.l	devicename(pc),a1
	move.l	($4).L,a6	
 	jsr	_LVOFindName(a6)
	move.l	d0,a0
	move.l	-28(a0),TrackDiskIO
	rts

	

;==================================
;= Routine for processing Gadgets =
;==================================

process_gadgets:
	move.w	gg_GadgetID(a2),d0
	cmp.w	#WATCH,d0
	bne.s	1$
	rts
1$	cmp.w	#DRIVE,d0
	beq.s	nextdrive
	cmp.w	#CLEAR,d0
	beq	clearmemory
	cmp.w	#VIEW,d0
	beq	viewbootblock
	cmp.w	#INSTALL,d0
	beq	installdisk
	cmp.w	#MEMORY,d0
	beq	viewmemory
	cmp.w	#NEWSHELL,d0
	beq	newcli
	cmp.w	#PREFS,d0
	beq	preferences
	cmp.w	#REBOOT,d0
	beq	reboot
	clr.l	d0		; Clear d0 if GadgetID <> WATCH
	rts

;==============================
;= Finds next available drive =
;==============================

nextdrive:
	move.b	drive,d0
	addq	#1,d0
	cmp.b	#4,d0		; drive number too high ???
	bne.s	1$
	moveq	#0,d0		; just select df0:
1$	cmp.b	#0,d0
	bne.s	2$
	move.l	df0,ITextText1
2$	cmp.b	#1,d0
	bne.s	3$
	move.l	df1,ITextText1
3$	cmp.b	#2,d0
	bne.s	4$
	move.l	df2,ITextText1
4$	cmp.b	#3,d0
	bne.s	5$
	move.l	df3,ITextText1
5$	move.b	d0,drive
	move.l	#ITextText1,d1
	move.l	DOSBase(pc),a6
	jsr	_LVODeviceProc(a6)	; Does drive exists ?
	tst.l	d0
	bne.s	6$		; Yeah
	bra.s	nextdrive	; Try next drive
6$	move.l	#Gadget1,a0
	move.l	window(pc),a1
	move.l	#0,a2
	move.l	IntuitionBase(pc),a6
	jsr	_LVORefreshGadgets(a6)
	clr.l	d0
	rts

;================================
;= Clears memory area from viri =
;================================

clearmemory:
	bsr	yesno			; Are you sure????
	tst.l	d0
	beq	clearexit		; Noop
	move.l	($4).L,a6
	jsr	_LVODisable(a6)
	lea.l	TaskName(pc),a1
	jsr	_LVOFindTask(a6)
	tst.l	d0
	beq.s	1$			; No rad
	move.l	d0,a1
	jsr	_LVORemTask(a6)		; Kill it!!!
1$	move.l	($4).L,a6
	clr.l	42(a6)
	clr.l	46(a6)
	clr.l	546(a6)
	clr.l	550(a6)
	clr.l	554(a6)
	cmp.l	#0,TrackDiskIO
	beq	2$
	lea.l	350(a6),a0
	lea.l	devicename(pc),a1
	move.l	($4).L,a6	
 	jsr	_LVOFindName(a6)
	move.l	d0,a0
	move.l	TrackDiskIO(pc),-28(a0)	; Restore TrackDiskIO
2$	move.l	DoIOVector(pc),-454(a6)
	clr.l	d1
	lea.l	34(a6),a0
	move.w	#$16,d0
loop	add.w	(a0)+,d1
	dbf	d0,loop
	not.w	d1
	move.w	d1,82(a6)
	jsr	_LVOEnable(a6)
	move.l	IntuitionBase(pc),a6
	move.l	#0,a0
	jsr	_LVODisplayBeep(a6)
	move.l	($4).L,a6
	move.b	#0,signal
	bsr	chlus			; Check memory
	bsr	printstatus		; Show current memory status
clearexit:
	clr.l 	d0			; No WATCH Gadget
	rts

;====================================
;= Are you sure to clear memory???? =
;====================================

yesno:
	move.l	IntuitionBase(pc),a6
	moveq	#0,d0
	lea.l	Alertstring(pc),a0
	move.l	#50,d1
	jsr	_LVODisplayAlert(a6)
	rts

;====================================
;= Are you sure to reboot????       =
;====================================

yesno2:
	move.l	IntuitionBase(pc),a6
	moveq	#0,d0
	lea.l	Alertstring2(pc),a0
	move.l	#50,d1
	jsr	_LVODisplayAlert(a6)
	rts

;====================================
;= Are you sure you want to quit??? =
;====================================

yesno3:
	move.l	IntuitionBase(pc),a6
	moveq	#0,d0
	lea.l	Alertstring3(pc),a0
	move.l	#50,d1
	jsr	_LVODisplayAlert(a6)
	rts





;==================================================
;= Routine shows a bootblock in ascii in a window =
;==================================================

viewbootblock:
	move.w	#534,hsize		; Adjust windowwidth
	move.w	#150,hsize+2		; Adjust height
	lea.l	InitTitle(pc),a0
	move.l	a0,title2
	move.l	IntuitionBase(pc),a6
	lea.l	NewWindowStructure2(pc),a0
	jsr	_LVOOpenWindow(a6)
	move.l	d0,window2
	move.l	d0,a0
	move.l	wd_RPort(a0),rp2

	move.l	($4).L,a6
	move.l	#1024,d0
	moveq	#2,d1			; Chip memory needed
	jsr	_LVOAllocMem(a6)	; Allocate buffer for bootblock
	move.l	d0,buffer
	
	bsr	readbootblock
	move.b	io_error,d0
	cmp.b	#29,d0
	bne	1$			; Disk is available

	move.l	window2(pc),a0
	move.l	#-234,d0
	move.l	#-100,d1
	move.l	IntuitionBase(pc),a6
	jsr	_LVOSizeWindow(a6)	; Make window smaller
	move.l	#disk_changed,Mt5
	move.l	#disk_changed,Mt6
	move.l	rp2,a0
	clr.l	d0
	clr.l	d1
	lea.l	MyTekst5(pc),a1
	jsr	_LVOPrintIText(a6)	; No disk !
	bra	2$			; skip printbuffer


1$	bsr	printbuffer

2$	move.l	buffer(pc),a1
	move.l	#1024,d0
	move.l	($4).L,a6
	jsr	_LVOFreeMem(a6)		; Free buffer for bootblock

	move.l	window2(pc),a0
	bsr	waitforclose		; Wait for closegadget

	move.l	IntuitionBase(pc),a6
	move.l	window2(pc),a0
	jsr	_LVOCloseWindow(a6)
	clr.l	d0			; No WATCH Gadget
	rts

;====================================
;= Routine for installing your disk =
;====================================

installdisk:
	move.w	#300,hsize
	move.w	#50,hsize+2		; Adjust height
	lea.l	InstallTitle(pc),a0
	move.l	a0,title2
	move.l	IntuitionBase(pc),a6
	lea.l	NewWindowStructure2(pc),a0
	jsr	_LVOOpenWindow(a6)
	move.l	d0,window2
	move.l	d0,a0
	move.l	wd_RPort(a0),rp2

	move.l	($4).L,a6
	move.l	#1024,d0
	move.l	#2+1<<16,d1		; Cleared Chip memory needed
	jsr	_LVOAllocMem(a6)	; Allocate buffer for bootblock
	move.l	d0,buffer
	beq	skip_install		; Prevent a guru
	
	lea.l	bootcode(pc),a0
	move.l	d0,a1
	move.l	#bootendcode-bootcode-1,d1
1$	move.b	(a0)+,(a1)+		; Copy bootblock into buffer
	dbra	d1,1$			
	lea.l	StandardBootBlock(pc),a0
	move.l	#Standardend-StandardBootBlock-1,d1
2$	move.b	(a0)+,(a1)+
	dbra	d1,2$

	bsr	sum
	bsr	writebuffer

	move.l	buffer(pc),a1
	move.l	#1024,d0
	move.l	($4).L,a6
	jsr	_LVOFreeMem(a6)		; Free buffer for bootblock

	tst.b   io_error
	bne.s	3$			; An error has occured
	move.l	#install_message,Mt5
	move.l	#install_message,Mt6
	bra.s	install_m
3$	move.b	io_error,d0
	cmp.b	#28,d0			; disk protected???
	bne.s	4$
	move.l	#disk_protected,Mt5
	move.l	#disk_protected,Mt6
	bra	install_m
4$	cmp.b	#29,d0			; disk changed ????
	bne	5$
	move.l	#disk_changed,Mt5
	move.l	#disk_changed,Mt6
	bra.s	install_m
5$	move.l	#install_fail,Mt5	; Unknown failure
	move.l	#install_fail,Mt6
install_m
	move.l	rp2(pc),a0
	clr.l	d0
	clr.l	d1
	lea.l	MyTekst5(pc),a1
	move.l	IntuitionBase(pc),a6
	jsr	_LVOPrintIText(a6)
	

	move.l	window2(pc),a0
	bsr	waitforclose		; Wait for closegadget

skip_install:
	move.l	IntuitionBase(pc),a6
	move.l	window2(pc),a0
	jsr	_LVOCloseWindow(a6)
	clr.l	d0			; No WATCH Gadget
	rts

;=============================================
;= Routine for displaying a part of ExecBase =
;=============================================


viewmemory:
	move.w	#318,hsize
	move.w	#100,hsize+2		; Adjust height
	lea.l	ViewTitle(pc),a0
	move.l	a0,title2
	move.l	IntuitionBase(pc),a6
	lea.l	NewWindowStructure2(pc),a0
	jsr	_LVOOpenWindow(a6)
	move.l	d0,window2
	move.l	d0,a0
	move.l	wd_RPort(a0),rp2

	move.l	($4).L,a6
	move.l	#5*80,d0
	move.l	#1<<16,d1			
	jsr	_LVOAllocMem(a6)	; Allocate buffer
	move.l	d0,buffer
	move.l	d0,-(a7)

	move.l	d0,MTE8
	move.l	d0,MTE8b
	add.l	#80,d0
	move.l	d0,MTE9
	move.l	d0,MTE9b
	add.l	#80,d0
	move.l	d0,MTE10
	move.l	d0,MTE10b
	add.l	#80,d0
	move.l	d0,MTE11
	move.l	d0,MTE11b
	add.l	#80,d0
	move.l	d0,MTE12
	move.l	d0,MTE12b



;======== ColdCapture ==============

	lea.l	coldcapture(pc),a0
	move.l	buffer(pc),a1
	bsr	stringcopy
	
	move.l	($4).L,a6
	move.l	42(a6),a0
	bsr	makestring


;======= CoolCapture =============

	add.l	#80,buffer	
	lea.l	coolcapture(pc),a0
	move.l	buffer(pc),a1
	bsr	stringcopy
	
	move.l	($4).L,a6
	move.l	46(a6),a0
	bsr	makestring


;======== KickMemPtr ===============

	add.l	#80,buffer
	lea.l	kickmemptr(pc),a0
	move.l	buffer(pc),a1
	bsr	stringcopy
	
	move.l	($4).L,a6
	move.l	546(a6),a0
	bsr	makestring


;========== KickTagPtr ================

	add.l	#80,buffer
	lea.l	kicktagptr(pc),a0
	move.l	buffer(pc),a1
	bsr	stringcopy
	
	move.l	($4).L,a6
	move.l	550(a6),a0
	bsr	makestring

;==== DoIO =========================

	add.l	#80,buffer
	lea.l	doio_vector(pc),a0
	move.l	buffer(pc),a1
	bsr	stringcopy
	
	move.l	($4).L,a6
	move.l	-454(a6),a0
	bsr	makestring

;===== Rad ============================

	move.l	($4).L,a6
	lea.l	TaskName(pc),a1
	jsr	_LVOFindTask(a6)
	tst.l	d0
	beq.s	no_rad			; No rad
	move.l	#found_rad,MTE13
	move.l	#found_rad,MTE13b
	bra.s	rad_cont
no_rad	move.l	#no_found_rad,MTE13
	move.l	#no_found_rad,MTE13b
rad_cont:

	move.l	rp2,a0
	clr.l	d0
	clr.l	d1
	lea.l	IText8(pc),a1
	move.l	IntuitionBase(pc),a6
	jsr	_LVOPrintIText(a6)
	
	move.l	($4).L,a6
	move.l	#5*80,d0
	move.l	(a7)+,a1			
	jsr	_LVOFreeMem(a6)		; Free  buffer
	
	move.l	window2(pc),a0
	bsr	waitforclose

	move.l	IntuitionBase(pc),a6
	move.l	window2(pc),a0
	jsr	_LVOCloseWindow(a6)

	clr.l	d0			; No WATCH Gadget
	rts

;==============
;= Makestring =
;==============

makestring:
	move.l	($4).L,a6
	lea.l	number(pc),a1
	bsr.s	convert

	lea.l	number(pc),a1
	move.l	buffer(pc),a0
	bsr.s	stringadd
	rts

;========================
;= Copy string a0 -> a1 =
;========================

stringcopy:
1$	move.b	(a0)+,(a1)+
	bne.s 	1$
	rts

;==============================
;= Add string a1 to string a0 =
;==============================

stringadd:
	move.l	a2,-(a7)
1$	cmp.b	#0,(a0)+		; Find end of string a0
	bne.s	1$
	subq	#1,a0
	move.l	a0,a2
	move.l	a1,a0
	move.l	a2,a1
	bsr.s	stringcopy		; Paste a1 to a0
	move.l	(a7)+,a2
	rts

;==========================================
;= Convert value in a0 to buffer a1 (Hex) =
;==========================================

convert:
	movem.l	d2-d3/a2,-(a7)
	lea.l	convtable(pc),a2
	move.l	a0,d1
	moveq	#7,d3
1$	move.l	d1,d2
	and.l	#$f,d2
	move.l	d2,d0
	move.b	0(a2,d0),-(a7)
	lsr.l	#4,d1
	dbra	d3,1$
	moveq	#7,d3
2$	move.b	(a7)+,(a1)+
	dbra	d3,2$
	movem.l	(a7)+,d2-d3/a2
	rts




;=========================================
;= Calculates lenght of string in buffer =
;= Returns lenght in d0                  =
;=========================================

length:
	clr.l	d0
	move.l	a5,-(a7)
	move.l	buffer,a5
1$	addq	#1,d0
	cmp.b	#0,(a5)+
	bne.s	1$
	subq	#1,d0
	move.l	(a7)+,a5
	rts
;=======================================
;= Waits for closegadget to be pressed =
;=======================================

waitforclose:
	move.l	($4).L,a6
	move.l	a5,-(a7)
	move.l  a0,a5
1$	move.l	a5,a0
	move.l	wd_UserPort(a0),a0
	move.l	a0,-(a7)
	moveq	#0,d1
	move.b	mp_SigBit(a0),d1
	moveq	#1,d0
	asl.l	d1,d0
	jsr	_LVOWait(a6)	; Wait for an event
	move.l	(a7)+,a0	; Get UserPort
	jsr	_LVOGetMsg(a6)	; Get Message from IDCMP Port
	move.l	d0,a1
	move.l	im_Class(a1),d4
	jsr	_LVOReplyMsg(a6) ; Reply the message

	cmp.l	#CLOSEWINDOW,d4
	bne.s	1$
	move.l	(a7)+,a5
	rts


;========================================
;= Prints current virusstatus in window =
;========================================

printstatus:
	move.l	window(pc),a0
	move.l	wd_RPort(a0),a1
	move.l	a1,rp		; Store RastPort

	moveq	#0,d1
	move.b	signal(pc),d1
	beq.s	1$		; No extra message needed (=Clean)
	cmp.b	#2,d1
	beq.s	1$		; The same...
	move.l	#message,Mt3	; System has been modified!
	move.l	#message,Mt4
	bra	12$

1$	move.l	rp(pc),a0		; Clear message box
	clr.	d0
	clr.l	d1
	lea.l	MyTekst3a(pc),a1
	move.l	IntuitionBase(pc),a6
	jsr	_LVOPrintIText(a6)
	
	move.l	#L9,Mt3		; Clear previous(?) message!
	move.l	#L9,Mt4
	

12$	move.l	rp(pc),a0
	clr.	d0
	clr.l	d1
	move.l	#MyTekst3,a1
	move.l	IntuitionBase(pc),a6
	jsr	_LVOPrintIText(a6)
	
	move.b	signal,d1
	cmp.b	#0,d1
	bne.s	2$
	lea.l	L0(pc),a0
	bra.s	10$
2$	cmp.b	#1,d1
	bne.s	3$
	lea.l	L1(pc),a0
	bra.s	10$
3$	cmp.b	#2,d1
	bne.s	4$
	lea.l	L2(pc),a0
	bra.s	10$
4$	cmp.b	#3,d1
	bne.s	5$
	lea.l	L3(pc),a0
	bra.s	10$
5$	cmp.b	#4,d1
	bne.s	6$
	lea.l	L4(pc),a0
	bra.s	10$
6$	cmp.b	#5,d1
	bne.s	7$
	lea.l	L5(pc),a0
	bra.s	10$
7$	cmp.b	#6,d1
	bne.s	8$
	lea.l	L6(pc),a0
	bra.s	10$
8$	cmp.b	#7,d1
	bne.s	9$
	lea.l	L7(pc),a0
	bra.s	10$
9$	cmp.b	#8,d1
	bne.s	11$
	lea.l	L8(pc),a0
10$	move.l	a0,Mt1
	move.l	a0,Mt2
	move.l	rp,a0
	lea.l	MyTekst(pc),a1
	clr.l	d0
	clr.l	d1
	move.l	IntuitionBase(pc),a6
	jsr	_LVOPrintIText(a6)
11$	rts


;======================================
;= Prints buffer in ascii on a window =
;======================================

printbuffer:
	move.l	buffer(pc),a3
	move.l	a3,a4
	move.l	#1023,d1
	clr.l	d0
cloop	move.b	(a3)+,d0
	cmp.b	#31,d0
	bls.s	outrange
	cmp.b	#127,d0
	bhs.s	outrange
	move.b	d0,(a4)+
	dbra	d1,cloop
	bra.s	printit
outrange:
	move.b	#'.',(a4)+
	dbra	d1,cloop
printit:
	move.l	window2(pc),a0
	move.l	wd_RPort(a0),rp2
	moveq	#0,d3
	move.l	buffer(pc),a3
ploop	move.l	d3,d1
	mulu	#8,d1
	add.l	#20,d1
	move.w	d1,y1
	subq	#1,d1
	move.w	d1,y2

	
	lea.l	dummy(pc),a2
	move.l	d3,d1
	mulu	#64,d1
	move.l	a3,a0
	add.l	d1,a0
	moveq	#63,d0
1$	move.b	(a0)+,(a2)+		; copy string to dummy
	dbra	d0,1$
	move.b	#0,(a2)			; end string with 0

	clr.l	d0
	clr.l	d1
	move.l	rp2(pc),a0
	lea.l	IText14(pc),a1
	move.l	IntuitionBase(pc),a6
	jsr	_LVOPrintIText(a6)

	addq	#1,d3
	cmp.l	#15,d3
	bls.s	ploop
	rts

;============================
;= Read bootblock in buffer =
;============================

readbootblock:
	move.w	#READ,commando
	bsr.s	bootio
	rts

;=============================
;= Write buffer to bootblock =
;=============================

writebuffer:
	move.w	#WRITE,commando
	bsr.s	bootio
	rts


;==========================================
;= Multi function boot read/write routine =
;=					  =
;= io_error contains error on exit	  =
;=					  =
;==========================================

bootio:
	move.l	($4).L,a6
	move.l	DoIOVector(pc),a5     ; ?????????????????????????
	sub.l	a1,a1
	jsr	_LVOFindTask(a6)
	move.l	d0,readreply+$10
	lea.l	readreply(pc),a1
	jsr	_LVOAddPort(a6)
	lea.l	diskio(pc),a1
	moveq	#0,d0
	move.b	drive,d0
	clr.l	d1
	lea.l	devicename(pc),a0
	jsr	_LVOOpenDevice(a6)
	tst.l	d0
	beq.s	tskip
	lea.l	readreply(pc),a1
	jsr	_LVORemPort(a6)
	bra	trackerror
tskip	lea.l	diskio(pc),a1
	move.l	buffer,40(a1)
	move.l	#readreply,14(a1)
	move.w	#TD_CHANGESTATE,28(a1)
	jsr	(a5)				; Jump into Rom !!!!
	move.l	diskio+32,d6
	beq.s	tskip2
	move.b	#29,io_error
	bra	terror				; No disk!

tskip2	move.w	commando,d5
	cmp.w	#READ,d5
	bne.s	1$				; Don't CMD_CLEAR for a write
	lea.l	diskio(pc),a1			; We will read a bootblock
	move.l	buffer(pc),40(a1)
	move.l	#readreply,14(a1)		; so, force a reading
	move.w	#5,28(a1)
	jsr	(a5)		; CMD_Clear (Clear trackbuffer)

1$	lea.l	diskio(pc),a1
	move.l	#readreply,14(a1)
	move.w	commando,28(a1)
	move.l	buffer(pc),40(a1)
	move.l	#1024,36(a1)
	move.l	#0,44(a1)
	move.l	($4).L,a6
	jsr	(a5)
	move.b	diskio+31,io_error		; Error number

	move.w	commando,d5
	cmp.w	#WRITE,d5
	bne.s	2$

	lea.l	diskio(pc),a1
	move.l	buffer(pc),40(a1)
	move.l	#readreply,14(a1)
	move.w	#4,28(a1)		; CMD_UPDATE
	move.l	($4).L,a6
	jsr	(a5)		; Write all buffers out
	move.b	diskio+31,io_error	; Get error number

2$	tst.b	io_error
	beq.s	tgood
terror	lea.l	errormessage(pc),a1
	move.l	window2(pc),a0
	move.l	#0,a2
	move.l	IntuitionBase(pc),a6
	jsr	_LVOSetWindowTitles(a6)
	move.l	($4).L,a6
	
tgood	lea.l	diskio(pc),a1
	move.w	#9,28(a1)		; TD_MOTOR
	move.l	#0,36(a1)
	jsr	(a5)

	lea.l	readreply(pc),a1
	jsr	_LVORemPort(a6)
	lea.l	diskio(pc),a1
	jsr	_LVOCloseDevice(a6)

trackerror:
	rts

;================================
;= The maincode of my Bootblock =
;================================

bootcode:
	dc.b	'DOS',0
	dc.l	0
root	dc.l	880
main	move.l	($4).L,a6
	lea.l	Dosname(pc),a1
	jsr	_LVOFindResident(a6)
	move.l	d0,a0
	move.l	22(a0),a0
	clr.l	d0
	rts
Dosname	dc.b	'dos.library',0
bootendcode:

;=========================================================
;= Routine which calculates the checksum of my bootblock =
;=========================================================
	even

sum	clr.l	d0
	move.l	buffer(pc),a0
	move.l	#255,d1
sumloop	add.l	(a0)+,d0
	bcc.s	sumcont
	addq	#1,d0
sumcont	dbra	d1,sumloop
	moveq	#-1,d1
	sub.l	d0,d1
	move.l	buffer,a2
	move.l	d1,4(a2)
	rts

;=====================================
;= This routine will spawn a new cli =
;=====================================

newcli:
	lea.l	commandstring(pc),a0
	bra	cont

do_function_keys:
	cmp.w	#FUNC_F2,d0
	bne	1$
	lea.l	script2(pc),a0
	bra	cont
1$	cmp.w	#FUNC_F3,d0
	bne	2$
	lea.l	script3(pc),a0
	bra	cont
2$	cmp.w	#FUNC_F4,d0
	bne	3$
	lea.l	script4(pc),a0
	bra	cont
3$	cmp.w	#FUNC_F5,d0
	bne	4$
	lea.l	script5(pc),a0
	bra	cont
4$	cmp.w	#FUNC_F6,d0
	bne	5$
	lea.l	script6(pc),a0
	bra	cont
5$	cmp.w	#FUNC_F7,d0
	bne	6$
	lea.l	script7(pc),a0
	bra	cont
6$	cmp.w	#FUNC_F8,d0
	bne	7$
	lea.l	script8(pc),a0
	bra	cont
7$	cmp.w	#FUNC_F9,d0
	bne	8$
	lea.l	script9(pc),a0
	bra	cont
8$	cmp.w	#FUNC_F10,d0
	bne	ret
	lea.l	script10(pc),a0
cont	move.l	a0,d1
	move.l	pcb_Input,d2
	move.l	pcb_Output,d3
	move.l	DOSBase(pc),a6
	jsr	_LVOExecute(a6)

ret	move.b	#0,keyfound
	clr.l	d0
	rts	

 

;====================================
;= Help routine: shows credits+help =
;====================================

showhelp:
	move.w	#450,hsize
	move.w	#130,hsize+2		; Adjust height
	move.l	#HelpTitle,title2
	move.l	IntuitionBase(pc),a6
	lea.l	NewWindowStructure2,a0
	jsr	_LVOOpenWindow(a6)
	move.l	d0,window2
	move.l	d0,a0
	move.l	wd_RPort(a0),a0
	lea.l	Text15(pc),a1
	clr.l	d0
	clr.l	d1
	jsr	_LVOPrintIText(a6)

	move.l	window2(pc),a0
	bsr	waitforclose

	move.l	IntuitionBase(pc),a6
	move.l	window2(pc),a0
	jsr	_LVOCloseWindow(a6)

	clr.l	d0
	rts

;===========================
;= The preference routines =
;===========================

preferences
	movem.l	d0-d6/a0-a6,-(a7)
	move.l	IntuitionBase(pc),a6
	lea.l	NewWindowStructure3(pc),a0
	jsr	_LVOOpenWindow(a6)
	move.l	d0,window3
	beq	pout
	move.l	d0,a0
	move.l	wd_RPort(a0),a0
	lea.l	Text24(pc),a1
	clr.l	d0
	clr.l	d1
	jsr	_LVOPrintIText(a6)
	
	move.b	patchstatus,tempstatus
	bsr	reflect

plook	move.l	window3(pc),a0
	move.l	($4).L,a6
	move.l	wd_UserPort(a0),a0
	move.l	a0,-(a7)
	moveq	#0,d1
	move.b	mp_SigBit(a0),d1
	moveq	#1,d0
	asl.l	d1,d0
	jsr	_LVOWait(a6)	; Wait for an event
	move.l	(a7)+,a0	; Get UserPort
	jsr	_LVOGetMsg(a6)	; Get Message from IDCMP Port
	move.l	d0,a1
	move.l	im_Class(a1),d4
	move.l	im_Address(a1),d5
	jsr	_LVOReplyMsg(a6) ; Reply the message

	cmp.l	#CLOSEWINDOW,d4
	beq.s	p_cancel
	cmp.l	#GADGETUP,d4
	bne	plook
	move.l	d5,a1
	move.w	GadgetID(a1),d0

	

	cmp.w	#USE,d0
	beq	p_use
	cmp.w	#CANCEL,d0
	beq	p_cancel
	cmp.w	#SAVE,d0
	beq	p_save
	cmp.w	#NOCARE,d0
	beq	p_nocare
	cmp.w	#MOUSEACC,d0
	beq	p_mouse
	cmp.w	#FUNCTIONKEYS,d0
	bne	plook
p_functionkeys:
	eor.b	#FUNCTION_PATCH,tempstatus
	bra	plook
p_use:	
	move.b	tempstatus,patchstatus
	bra	pexit
p_cancel
	bra	pexit
p_save
	move.b	tempstatus,patchstatus
	bsr	Saddam
	bsr	save_prefs
	bra	pexit
p_nocare
	eor.b	#NOCARE_PATCH,tempstatus
	bra	plook
p_mouse
	eor.b	#MOUSE_PATCH,tempstatus
	bra	plook

pexit	move.l	IntuitionBase(pc),a6
	move.l	window3(pc),a0
	jsr	_LVOCloseWindow(a6)
	bsr	reflect
	btst.b	#0,patchstatus(pc)
	bne.s	1$
	bsr	nocare_off
	bra.s	2$
1$	bsr	nocare
2$	movem.l	(a7)+,d0-d6/a0-a6
pout	clr.l	d0
	rts



reflect:
	clr.w	d1
	move.b	patchstatus(pc),d0
	move.b	d0,d1
	and.b	#1,d1
	lsl.w	#7,d1
	and.w	#$ff7f,tog1
	or.w	d1,tog1
	clr.w	d1
	move.b	d0,d1
	and.b	#2,d1
	lsl.w	#6,d1
	and.w	#$ff7f,tog2
	or.w	d1,tog2
	clr.w	d1
	move.b	d0,d1
	and.b	#4,d1
	lsl.w	#5,d1
	and.w	#$ff7f,tog3
	or.w	d1,tog3
	rts




;======================
;= The reboot routine =
;======================

reboot	bsr	yesno2				; Want to reboot???
	tst.l	d0
	bne.s	1$				; noop
	rts
1$	move.l	($4).L,a6
	move.l	#-1,$4
	cmp.w	#V36_EXEC,LIB_VERSION(a6)
	blt.s	old_exec
	jmp	TEMP_ColdReboot(a6)     ;Let Exec do it...
	;NOTE: Control flow never returns to here


old_exec:	
	lea.l	GoAway(pc),a5           ;address of code to execute
	jsr	_LVOSupervisor(a6)      ;trap to code at (a5)...
	;NOTE: Control flow never returns to here


;-------------- MagicResetCode ---------DO NOT CHANGE-----------------------

		CNOP	0,4			;IMPORTANT! Longword align!
GoAway: 	lea.l	(MAGIC_ROMEND).L,a0 	;(end of ROM)
		sub.l	MAGIC_SIZEOFFSET(a0),a0 ;(end of ROM)-(ROM size)=PC
		move.l	4(a0),a0                ;Get Initial Program Counter
		subq.l	#2,a0			;now points to second RESET
		reset				;first RESET instruction
		jmp	(a0)                    ;CPU Prefetch executes this
		;NOTE: the RESET and JMP instructions must share a longword!

;---------------------------------------DO NOT CHANGE-----------------------



;=======================
;= The Cleanup Routine =
;=======================

exit	move.l	$4,a6
	move.b	#DIE,status
	bsr	nocare_off		; Remove Nocare patch
	move.l	$4,a6
	lea.l	InputRequestBlock(pc),a0
	move.w	#IND_REMHANDLER,io_Command(a0)
	move.l	#HandlerStuff,io_Data(a0)
	move.l	a0,a1
	jsr	_LVODoIO(a6)		; Remove handler
	lea.l	InputRequestBlock(pc),a0
	jsr	_LVOCloseDevice(a6)

	move.l	InputDevPort,a1
	jsr	_LVORemPort(a6)

	move.l	InputDevPort,a1
	move.l	#mp_Size,d0
	jsr	_LVOFreeMem(a6)	

find	move.l	DOSBase,a6		; Give Check Task time to die
	move.l	#25,d1			; as I have a pri of 2
	jsr	_LVODelay(a6)
	move.l	$4,a6
	lea.l	CHECK_NAME(pc),a1
	jsr	_LVOFindTask(a6)
	tst.l	d0
	bne.s	find			; Wait until Check Task is dead

	move.l	checktask(pc),a1
	move.l	#TC_SIZE,d1
	jsr	_LVOFreeMem(a6)		; Free Memory of check task

	move.l	($4).L,a6
	move.l	GfxBase,a1
	jsr	_LVOCloseLibrary(a6)
nographics:
	move.l	IntuitionBase(pc),a1
	jsr	_LVOCloseLibrary(a6)
nointuition:
	move.l	DOSBase(pc),a1
	jsr	_LVOCloseLibrary(a6)
nodos	jsr	_LVODisable(a6)		; Disable interupts (avoid AllocMem's)
	move.l	DOSBase(pc),a6 		; Assume Dos hasn't moved (???)
	move.l	#mymain,d1
	sub.l	#4,d1
	lsr.l	#2,d1			; make BPTR !!!!!!
	jsr	_LVOUnLoadSeg(a6)	; Unload this code
	move.l	$4,a6
	move.l	#0,a1
	jsr	_LVORemTask(a6)		; Kill myself
	rts


;================
;= Data section =
;================

	Section "Main",data

Title	dc.b	'BigBrother V3.12 by EA van Breemen',10,13
	dc.b	169,'1992 Orega Holland.',10,13,0
Title_Size	equ	*-Title	
	even

Active_Title:
	dc.b	'BigBrother is already active.',10,13,0
Active_Size	equ	*-Active_Title	
	even

NewWindowStructure1:
	dc.w	62,30
	dc.w	330,130
	dc.b	1,3
	dc.l	GADGETUP+CLOSEWINDOW+RAWKEY
	dc.l	WINDOWDRAG+WINDOWDEPTH+WINDOWCLOSE+ACTIVATE+NOCAREREFRESH
	dc.l	Gadget1
	dc.l	NULL
	dc.l	CopyrightName
	dc.l	NULL
	dc.l	NULL
	dc.w	5,5
	dc.w	-1,-1
	dc.w	WBENCHSCREEN
NewWindowStructure2:
	dc.w	0,0
hsize	dc.w	550,160
	dc.b	1,3
	dc.l	CLOSEWINDOW
	dc.l	ACTIVATE+NOCAREREFRESH+WINDOWCLOSE
	dc.l	NULL
	dc.l	NULL
title2	dc.l	InitTitle
	dc.l	NULL
	dc.l	NULL
	dc.w	5,5
	dc.w	-1,-1
	dc.w	WBENCHSCREEN

NewWindowStructure3:
	dc.w	0,0
	dc.w	400,150
	dc.b	1,3
	dc.l	CLOSEWINDOW+GADGETUP
	dc.l	ACTIVATE+NOCAREREFRESH+WINDOWCLOSE
	dc.l	Gadget10
	dc.l	NULL
	dc.l	PrefsTitle
	dc.l	NULL
	dc.l	NULL
	dc.w	5,5
	dc.w	-1,-1
	dc.w	WBENCHSCREEN

CopyrightName:
	dc.b 'Big Brother V3.12',0
	dc.b	' ',169,'1989/1990',0
	cnop 0,2
InitTitle:
	dc.b	'BootBlock:',0
	even
ViewTitle:
	dc.b	'Contents of ExecBase:',0
	even
InstallTitle:
	dc.b	'Installing BootBlock',0
	even
HelpTitle:
	dc.b	'Help',0
	even
PrefsTitle:
	dc.b	'Preferences',0
	even
install_message:
	dc.b	'Disk has been installed',0
	even
install_fail:
	dc.b	'Install has failed',0
	even
disk_protected:
	dc.b	'Disk is write-protected!',0
	even
disk_changed:
	dc.b	'Disk has been removed!',0
	even
StandardBootBlock:
	dc.b	'Standard BootBlock by Orega Holland.'
	dc.b    ' Copyright 1989,1990. Installed by Big Brother V3.12'
Standardend:
	even
prefs_file:
	dc.b	's:big_prefs',0
	even
topaz80:
	dc.l	topazname
	dc.w	TOPAZ_EIGHTY
	dc.b	0,0
topazname:
	dc.b	'topaz.font',0
	even

Gadget1:
	dc.l	Gadget2
	dc.w	29,22
	dc.w	80,15
	dc.w	GADGHIMAGE
	dc.w	RELVERIFY
	dc.w	BOOLGADGET
	dc.l	Border1
	dc.l	RenderBorder1
	dc.l	IText1
	dc.l	NULL
	dc.l	NULL
	dc.w	DRIVE
	dc.l	NULL
Border1:
	dc.w	0,0
	dc.b	2,0,RP_JAM2
	dc.b	3
	dc.l	BorderVectors1
	dc.l	Border1a
Border1a:
	dc.w	0,0
	dc.b	1,0,RP_JAM2
	dc.b	3
	dc.l	BorderVectors1a
	dc.l	NULL
RenderBorder1:
	dc.w	0,0
	dc.b	1,0,RP_JAM2
	dc.b	3
	dc.l	BorderVectors1
	dc.l	RenderBorder1a
RenderBorder1a:
	dc.w	0,0
	dc.b	2,0,RP_JAM2
	dc.b	3
	dc.l	BorderVectors1a
	dc.l	NULL

BorderVectors1:
	dc.w	0,15
	dc.w	0,0
	dc.w	80,0
BorderVectors1a:
	dc.w	80,0
	dc.w	80,15
	dc.w	0,15	


;======== Custom Drawing =======================

Border2:
	dc.w	30,96
	dc.b	2,0,RP_JAM2
	dc.b	3
	dc.l	BorderVectors2
	dc.l	Border3
Border3:
	dc.w	30,96
	dc.b	1,0,RP_JAM2
	dc.b	3
	dc.l	BorderVectors2a
	dc.l	NULL
BorderVectors2:			; Tekstbox of mainwindow
	dc.w	0,26
	dc.w	0,0
	dc.w	280,0
BorderVectors2a:
	dc.w	280,0
	dc.w	280,26
	dc.w	0,26
MyTekst:
	dc.b	1,0,RP_JAM2,0
	dc.w	45,110
	dc.l	topaz80
Mt1	dc.l	NULL
	dc.l	MyTekst2
MyTekst2:
	dc.b	2,0,RP_JAM1,0
	dc.w	44,109
	dc.l	topaz80
Mt2	dc.l	NULL
	dc.l	NULL
MyTekst3:
	dc.b	1,0,RP_JAM2,0
	dc.w	45,100
	dc.l	topaz80
Mt3	dc.l	NULL
	dc.l	MyTekst4
MyTekst4:
	dc.b	2,0,RP_JAM1,0
	dc.w	44,99
	dc.l	topaz80
Mt4	dc.l	NULL
	dc.l	NULL


;=====================================================
;= IntuiText structures for clearing the message box =
;=====================================================

MyTekst3a:
	dc.b	1,0,RP_JAM2,0
	dc.w	45,100
	dc.l	topaz80
	dc.l	L10
	dc.l	MyTekst4a
MyTekst4a:
	dc.b	1,0,RP_JAM2,0
	dc.w	44,99
	dc.l	topaz80
	dc.l	L10
	dc.l	MyTekst3b
MyTekst3b:
	dc.b	1,0,RP_JAM2,0
	dc.w	45,110
	dc.l	topaz80
	dc.l	L10
	dc.l	MyTekst4b
MyTekst4b:
	dc.b	1,0,RP_JAM2,0
	dc.w	44,109
	dc.l	topaz80
	dc.l	L10
	dc.l	NULL



MyTekst5:
	dc.b	1,0,RP_JAM2,0
	dc.w	40,25
	dc.l	topaz80
Mt5	dc.l	NULL
	dc.l	MyTekst6
MyTekst6:
	dc.b	2,0,RP_JAM1,0
	dc.w	39,24
	dc.l	topaz80
Mt6	dc.l	NULL
	dc.l	NULL

;=====================================


IText1:
	dc.b	1,0,RP_JAM2,0
	dc.w	21,3
	dc.l	topaz80
	dc.l	DummyTekst
	dc.l	IText1a
IText1a:
	dc.b	1,0,RP_JAM2,0
	dc.w	22,4
	dc.l	topaz80
	dc.l	ITextText1
	dc.l	IText1b
IText1b:
	dc.b	2,0,RP_JAM1,0
	dc.w	21,3
	dc.l	topaz80
	dc.l	ITextText1
	dc.l	NULL

ITextText1:
	dc.b	'DF0:',0
	cnop 0,2
DummyTekst:
	dc.b	'    ',0
	cnop 0,2
Gadget2:
	dc.l	Gadget3
	dc.w	128,46
	dc.w	80,15
	dc.w	GADGHIMAGE
	dc.w	RELVERIFY
	dc.w	BOOLGADGET
	dc.l	Border1
	dc.l	RenderBorder1
	dc.l	IText2
	dc.l	NULL
	dc.l	NULL
	dc.w	MEMORY
	dc.l	NULL
IText2:
	dc.b	1,0,RP_JAM2,0
	dc.w	15,4
	dc.l	topaz80
	dc.l	ITextText2
	dc.l	IText2b
IText2b:
	dc.b	2,0,RP_JAM1,0
	dc.w	14,3
	dc.l	topaz80
	dc.l	ITextText2
	dc.l	NULL
ITextText2:
	dc.b	'Memory',0
	cnop 0,2
Gadget3:
	dc.l	Gadget4
	dc.w	229,22
	dc.w	80,15
	dc.w	GADGHIMAGE
	dc.w	RELVERIFY
	dc.w	BOOLGADGET
	dc.l	Border1
	dc.l	RenderBorder1
	dc.l	IText3
	dc.l	NULL
	dc.l	NULL
	dc.w	INSTALL
	dc.l	NULL

IText3:
	dc.b	1,0,RP_JAM2,0
	dc.w	13,4
	dc.l	topaz80
	dc.l	ITextText3
	dc.l	IText3b
IText3b:
	dc.b	2,0,RP_JAM1,0
	dc.w	12,3
	dc.l	topaz80
	dc.l	ITextText3
	dc.l	NULL
ITextText3:
	dc.b	'Install',0
	cnop 0,2
Gadget4:
	dc.l	Gadget5
	dc.w	29,46
	dc.w	80,15
	dc.w	GADGHIMAGE
	dc.w	RELVERIFY
	dc.w	BOOLGADGET
	dc.l	Border1
	dc.l	RenderBorder1
	dc.l	IText4
	dc.l	NULL
	dc.l	NULL
	dc.w	WATCH
	dc.l	NULL

IText4:
	dc.b	1,0,RP_JAM2,0
	dc.w	22,4
	dc.l	topaz80
	dc.l	ITextText4
	dc.l	IText4b
IText4b:
	dc.b	2,0,RP_JAM1,0
	dc.w	21,3
	dc.l	topaz80
	dc.l	ITextText4
	dc.l	NULL
ITextText4:
	dc.b	'Watch',0
	cnop 0,2
Gadget5:
	dc.l	Gadget6
	dc.w	229,46
	dc.w	80,15
	dc.w	GADGHIMAGE
	dc.w	RELVERIFY
	dc.w	BOOLGADGET
	dc.l	Border1
	dc.l	RenderBorder1
	dc.l	IText5
	dc.l	NULL
	dc.l	NULL
	dc.w	CLEAR
	dc.l	NULL

IText5:
	dc.b	1,0,RP_JAM2,0
	dc.w	22,4
	dc.l	topaz80
	dc.l	ITextText5
	dc.l	IText5b
IText5b:
	dc.b	2,0,RP_JAM1,0
	dc.w	21,3
	dc.l	topaz80
	dc.l	ITextText5
	dc.l	NULL
ITextText5:
	dc.b	'Clear',0
	cnop 0,2
Gadget6:
	dc.l	Gadget7
	dc.w	128,22
	dc.w	80,15
	dc.w	GADGHIMAGE
	dc.w	RELVERIFY
	dc.w	BOOLGADGET
	dc.l	Border1
	dc.l	RenderBorder1
	dc.l	IText6
	dc.l	NULL
	dc.l	NULL
	dc.w	VIEW
	dc.l	NULL

IText6:
	dc.b	1,0,RP_JAM2,0
	dc.w	22,4
	dc.l	topaz80
	dc.l	ITextText6
	dc.l	IText6b
IText6b:
	dc.b	2,0,RP_JAM1,0
	dc.w	21,3
	dc.l	topaz80
	dc.l	ITextText6
	dc.l	NULL
ITextText6:
	dc.b	'View',0
	even
	
Gadget7:
	dc.l	Gadget8
	dc.w	29,70
	dc.w	80,15
	dc.w	GADGHIMAGE
	dc.w	RELVERIFY
	dc.w	BOOLGADGET
	dc.l	Border1
	dc.l	RenderBorder1
	dc.l	IText7
	dc.l	NULL
	dc.l	NULL
	dc.w	NEWSHELL
	dc.l	NULL
IText7:
	dc.b	1,0,RP_JAM2,0
	dc.w	10,4
	dc.l	topaz80
	dc.l	ITextText7
	dc.l	IText7b
IText7b:
	dc.b	2,0,RP_JAM1,0
	dc.w	9,3
	dc.l	topaz80
	dc.l	ITextText7
	dc.l	NULL
ITextText7:
	dc.b	'NewShell',0
	
	even
Gadget8:
	dc.l	Gadget9
	dc.w	229,70
	dc.w	80,15
	dc.w	GADGHIMAGE
	dc.w	RELVERIFY
	dc.w	BOOLGADGET
	dc.l	Border1
	dc.l	RenderBorder1
	dc.l	_IText8
	dc.l	NULL
	dc.l	NULL
	dc.w	PREFS
	dc.l	NULL
_IText8:
	dc.b	1,0,RP_JAM2,0
	dc.w	23,4
	dc.l	topaz80
	dc.l	_ITextText8
	dc.l	_IText8b
_IText8b:
	dc.b	2,0,RP_JAM1,0
	dc.w	22,3
	dc.l	topaz80
	dc.l	_ITextText8
	dc.l	NULL
_ITextText8:
	dc.b	'Prefs',0
	
	even

Gadget9:
	dc.l	NULL
	dc.w	128,70
	dc.w	80,15
	dc.w	GADGHIMAGE
	dc.w	RELVERIFY
	dc.w	BOOLGADGET
	dc.l	Border1
	dc.l	RenderBorder1
	dc.l	_IT9
	dc.l	NULL
	dc.l	NULL
	dc.w	REBOOT
	dc.l	NULL
_IT9:
	dc.b	1,0,RP_JAM2,0
	dc.w	15,4
	dc.l	topaz80
	dc.l	_ITT9
	dc.l	_IT9b
_IT9b:
	dc.b	2,0,RP_JAM1,0
	dc.w	14,3
	dc.l	topaz80
	dc.l	_ITT9
	dc.l	NULL
_ITT9:
	dc.b	'ReBoot',0
	
	even

;===========================
;= Gadgets for preferences =
;===========================

Gadget10:
	dc.l	Gadget11
	dc.w	220,30
	dc.w	15,9
tog1	dc.w	GADGHCOMP+SELECTED
	dc.w	RELVERIFY+TOGGLESELECT
	dc.w	BOOLGADGET
	dc.l	RenderBorder4
	dc.l	NULL
	dc.l	NULL
	dc.l	NULL
	dc.l	NULL
	dc.w	NOCARE
	dc.l	NULL
	
	even

Gadget11:
	dc.l	Gadget12
	dc.w	220,50
	dc.w	15,9
tog2	dc.w	GADGHCOMP+SELECTED
	dc.w	RELVERIFY+TOGGLESELECT
	dc.w	BOOLGADGET
	dc.l	RenderBorder4
	dc.l	NULL
	dc.l	NULL
	dc.l	NULL
	dc.l	NULL
	dc.w	MOUSEACC
	dc.l	NULL

	even

Gadget12:
	dc.l	Gadget13
	dc.w	220,70
	dc.w	15,9
tog3	dc.w	GADGHCOMP+SELECTED
	dc.w	RELVERIFY+TOGGLESELECT
	dc.w	BOOLGADGET
	dc.l	RenderBorder4
	dc.l	NULL
	dc.l	NULL
	dc.l	NULL
	dc.l	NULL
	dc.w	FUNCTIONKEYS
	dc.l	NULL

Gadget13:
	dc.l	Gadget14
	dc.w	30,120
	dc.w	80,15
	dc.w	GADGHIMAGE
	dc.w	RELVERIFY
	dc.w	BOOLGADGET
	dc.l	Border1
	dc.l	RenderBorder1
	dc.l	PText13
	dc.l	NULL
	dc.l	NULL
	dc.w	CANCEL
	dc.l	NULL
PText13:
	dc.b	1,0,RP_JAM2,0
	dc.w	15,4
	dc.l	topaz80
	dc.l	PTextText13
	dc.l	PText13b
PText13b:
	dc.b	2,0,RP_JAM1,0
	dc.w	14,3
	dc.l	topaz80
	dc.l	PTextText13
	dc.l	NULL
PTextText13:
	dc.b	'Cancel',0
	
	even

Gadget14:
	dc.l	Gadget15
	dc.w	130,120
	dc.w	80,15
	dc.w	GADGHIMAGE
	dc.w	RELVERIFY
	dc.w	BOOLGADGET
	dc.l	Border1
	dc.l	RenderBorder1
	dc.l	PText14
	dc.l	NULL
	dc.l	NULL
	dc.w	USE
	dc.l	NULL
PText14:
	dc.b	1,0,RP_JAM2,0
	dc.w	26,4
	dc.l	topaz80
	dc.l	PTextText14
	dc.l	PText14b
PText14b:
	dc.b	2,0,RP_JAM1,0
	dc.w	25,3
	dc.l	topaz80
	dc.l	PTextText14
	dc.l	NULL
PTextText14:
	dc.b	'Use',0
	
	even

Gadget15:
	dc.l	NULL
	dc.w	230,120
	dc.w	80,15
	dc.w	GADGHIMAGE
	dc.w	RELVERIFY
	dc.w	BOOLGADGET
	dc.l	Border1
	dc.l	RenderBorder1
	dc.l	PText15
	dc.l	NULL
	dc.l	NULL
	dc.w	SAVE
	dc.l	NULL
PText15:
	dc.b	1,0,RP_JAM2,0
	dc.w	22,4
	dc.l	topaz80
	dc.l	PTextText15
	dc.l	PText15b
PText15b:
	dc.b	2,0,RP_JAM1,0
	dc.w	21,3
	dc.l	topaz80
	dc.l	PTextText15
	dc.l	NULL
PTextText15:
	dc.b	'Save',0
	
	even

;======== Tekst structures for viewmemory ============

IText8:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,26
	dc.l	topaz80
MTE8	dc.l	NULL
	dc.l	IText8b
IText8b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,25
	dc.l	topaz80
MTE8b	dc.l	NULL
	dc.l	IText9

IText9:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,36
	dc.l	topaz80
MTE9	dc.l	NULL
	dc.l	IText9b
IText9b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,35
	dc.l	topaz80
MTE9b	dc.l	NULL
	dc.l	IText10

IText10:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,46
	dc.l	topaz80
MTE10	dc.l	NULL
	dc.l	IText10b
IText10b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,45
	dc.l	topaz80
MTE10b	dc.l	NULL
	dc.l	IText11

IText11:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,56
	dc.l	topaz80
MTE11	dc.l	NULL
	dc.l	IText11b
IText11b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,55
	dc.l	topaz80
MTE11b	dc.l	NULL
	dc.l	IText12

IText12:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,66
	dc.l	topaz80
MTE12	dc.l	NULL
	dc.l	IText12b
IText12b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,65
	dc.l	topaz80
MTE12b	dc.l	NULL
	dc.l	IText13

IText13:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,81
	dc.l	topaz80
MTE13	dc.l	NULL
	dc.l	IText13b
IText13b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,80
	dc.l	topaz80
MTE13b	dc.l	NULL
	dc.l	NULL
IText14:
	dc.b	1,0,RP_JAM2,0
	dc.w	10
y1	dc.w	0
	dc.l	topaz80
MTE14	dc.l	dummy
	dc.l	IText14b
IText14b:
	dc.b	2,0,RP_JAM1,0
	dc.w	9
y2	dc.w	0
	dc.l	topaz80
MTE14b	dc.l	dummy
	dc.l	NULL

;== Help strings =====================================

Text15:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,21
	dc.l	topaz80
	dc.l	T15
	dc.l	Text15b
Text15b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,20
	dc.l	topaz80
	dc.l	T15
	dc.l	Text16
T15	dc.b	'This program is programmed by EA van Breemen',0
	even
Text16:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,31
	dc.l	topaz80
	dc.l	T16
	dc.l	Text16b
Text16b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,30
	dc.l	topaz80
	dc.l	T16
	dc.l	Text17
T16	dc.b	'Copyright by Orega Holland',0
	even
Text17:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,41
	dc.l	topaz80
	dc.l	T17
	dc.l	Text17b
Text17b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,40
	dc.l	topaz80
	dc.l	T17
	dc.l	Text18
T17	dc.b	169,'1989-1992. Any commercially based reproducing',0
	even
Text18:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,51
	dc.l	topaz80
	dc.l	T18
	dc.l	Text18b
Text18b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,50
	dc.l	topaz80
	dc.l	T18
	dc.l	Text19
T18	dc.b	'by any means of this shareware product is illegal.',0
	even
Text19:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,61
	dc.l	topaz80
	dc.l	T19
	dc.l	Text19b
Text19b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,60
	dc.l	topaz80
	dc.l	T19
	dc.l	Text20
T19	dc.b	'If you find this program usefull please send $10',0
	even
Text20:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,71
	dc.l	topaz80
	dc.l	T20
	dc.l	Text20b
Text20b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,70
	dc.l	topaz80
	dc.l	T20
	dc.l	Text21
T20	dc.b	'to: EA van Breemen, Berliozplein 15, 2651 VG',0
	even
Text21:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,81
	dc.l	topaz80
	dc.l	T21
	dc.l	Text21b
Text21b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,80
	dc.l	topaz80
	dc.l	T21
	dc.l	Text22
T21	dc.b	'Berkel en Rodenrijs,  Holland.',0
	even
Text22:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,101
	dc.l	topaz80
	dc.l	T22
	dc.l	Text22b
Text22b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,100
	dc.l	topaz80
	dc.l	T22
	dc.l	Text23
T22	dc.b	'Help:   Ctrl-F1   ..... NewShell',0
	even
Text23:
	dc.b	1,0,RP_JAM2,0
	dc.w	11,111
	dc.l	topaz80
	dc.l	T23
	dc.l	Text23b
Text23b:
	dc.b	2,0,RP_JAM1,0
	dc.w	10,110
	dc.l	topaz80
	dc.l	T23
	dc.l	NULL
T23	dc.b	'        Ctrl-HELP ..... BigBrother',0
	even

Text24:
	dc.b	1,0,RP_JAM2,0
	dc.w	31,31
	dc.l	topaz80
	dc.l	T24
	dc.l	Text24b
Text24b:
	dc.b	2,0,RP_JAM1,0
	dc.w	30,30
	dc.l	topaz80
	dc.l	T24
	dc.l	Text25
T24	dc.b	'NoCare patch installed:',0
	even

Text25:
	dc.b	1,0,RP_JAM2,0
	dc.w	31,51
	dc.l	topaz80
	dc.l	T25
	dc.l	Text25b
Text25b:
	dc.b	2,0,RP_JAM1,0
	dc.w	30,50
	dc.l	topaz80
	dc.l	T25
	dc.l	Text26
T25	dc.b	'Mouse accelerator:',0
	even
Text26:
	dc.b	1,0,RP_JAM2,0
	dc.w	31,71
	dc.l	topaz80
	dc.l	T26
	dc.l	Text26b
Text26b:
	dc.b	2,0,RP_JAM1,0
	dc.w	30,70
	dc.l	topaz80
	dc.l	T26
	dc.l	NULL
T26	dc.b	'Function keys enabled:',0
	even


RenderBorder4:
	dc.w	-1,-1
	dc.b	1,0,RP_JAM2
	dc.b	3
	dc.l	BorderVectors4
	dc.l	RenderBorder4a
RenderBorder4a:
	dc.w	-1,-1
	dc.b	2,0,RP_JAM2
	dc.b	3
	dc.l	BorderVectors4a
	dc.l	NULL

BorderVectors4:
	dc.w	0,10
	dc.w	0,0
	dc.w	17,0
BorderVectors4a:
	dc.w	17,0
	dc.w	17,10
	dc.w	0,10	




;=====================================================

expert	dc.b	0,1,2,2,3,4,5,6,3,4,7
	dc.b   	7,3,4,7,7,8,8,0,1,8,8
	dc.b	5,5,8,8,7,7,8,8,7,7

	even

convtable	dc.b	'0123456789abcdef',0
	even

message	dc.b	'This system has been modified.',0
L0	dc.b	'Memory is clean.',0
L1	dc.b	'Sca virus.',0
L2	dc.b	'Unknown virus or not mounted rad.',0
L3	dc.b	'Non reset virus.',0
L4	dc.b	'Saddam like virus.',0
L5	dc.b	'Dasa virus.',0
L6	dc.b	'Dasa like virus.',0
L7	dc.b	'ByteBandit or Lamer virus.',0
L8	dc.b	'Unknown system configuration???',0
L9	dc.b	'System has not been modified. ',0
L10	dc.b	'                                 ',0

	even

TaskName	dc.b	'RAD',0
	even
devicename	dc.b	'trackdisk.device',0
	even
MyPortName	dc.b	'BigBrother Port',0
	even
errormessage	dc.b	'BootBlock Read/Write Error.',0
	even
found_rad	dc.b	'RadTask has been found.',0
	even
no_found_rad	dc.b	'RadTask has not been found.',0
	even
Alertstring	dc.w	170
		dc.b	15
		dc.b	'! ! ! ! !  W A R N I N G ! ! ! ! ! ',0
		dc.b	1
		dc.w	176
		dc.b	27
		dc.b	'Are you sure to clear the memory?',0
		dc.b	1
		dc.w	10
		dc.b	39
		dc.b	'Press <LEFT MOUSE BUTTON> for OK  ----  Press <RIGHT MOUSE BUTTON> for CANCEL',0
		dc.b	0
	even
Alertstring2	dc.w	170
		dc.b	15
		dc.b	'! ! ! ! !  W A R N I N G ! ! ! ! ! ',0
		dc.b	1
		dc.w	176
		dc.b	27
		dc.b	'Are you sure you want to Reboot? ',0
		dc.b	1
		dc.w	10
		dc.b	39
		dc.b	'Press <LEFT MOUSE BUTTON> for OK  ----  Press <RIGHT MOUSE BUTTON> for CANCEL',0
		dc.b	0
	even

Alertstring3	dc.w	170
		dc.b	15
		dc.b	'! ! ! ! !  W A R N I N G ! ! ! ! ! ',0
		dc.b	1
		dc.w	176
		dc.b	27
		dc.b	'Are you sure you want to quit ?  ',0
		dc.b	1
		dc.w	10
		dc.b	39
		dc.b	'Press <LEFT MOUSE BUTTON> for OK  ----  Press <RIGHT MOUSE BUTTON> for CANCEL',0
		dc.b	0
	even


;================
;= Library data =
;================

DosName	dc.b	'dos.library',0
	cnop 0,2
IntuitionName 	dc.b 'intuition.library',0
	cnop 0,2
GraphicsName 	dc.b 'graphics.library',0
	cnop 0,2
coldcapture	dc.b	'ColdCapture - Offset   42 :$',0
coolcapture	dc.b	'CoolCapture - Offset   46 :$',0
kickmemptr	dc.b	'KickMemPtr  - Offset  546 :$',0
kicktagptr	dc.b	'KickTagPtr  - Offset  550 :$',0
doio_vector	dc.b	'DoIO Vector - Offset -454 :$',0

number		dc.b	'00000000',0
	even

BIG_NAME	dc.b	'BigBrother Process',0
CHECK_NAME	dc.b	'Check Task',0
	even
NIL_NAME	dc.b	'NIL:',0
	even

acc	dc.w	3


script2		dc.b	'Execute s:F2',0
script3		dc.b	'Execute s:F3',0
script4		dc.b	'Execute s:F4',0
script5		dc.b	'Execute s:F5',0
script6		dc.b	'Execute s:F6',0
script7		dc.b	'Execute s:F7',0
script8		dc.b	'Execute s:F8',0
script9		dc.b	'Execute s:F9',0
script10	dc.b	'Execute s:F10',0



;=====================
;= Input Device data =
;=====================

InputDeviceName	dc.b	'input.device',0
	even



df0	dc.l	'DF0:'
df1	dc.l	'DF1:'
df2	dc.l	'DF2:'
df3	dc.l	'DF3:'

	dc.b	'    DoIO vector:'
	even
DoIOVector	dc.l	$fc06dc		; DoIO Vector for V1.2
TrackDiskIO	dc.l	$0
patchstatus	dc.b	1
	even

commandstring	dc.b	'newshell "con:0/0/639/100/Big Brother V3.12"',0
	cnop 0,2

	even
	section "Main",bss
	

DOSBase			ds.l	1
GfxBase			ds.l	1
IntuitionBase		ds.l	1
window			ds.l	1
window2			ds.l	1
window3			ds.l	1
oldopenwindow		ds.l	1
rp			ds.l	1
rp2			ds.l	1
buffer			ds.l	1
keyfound		ds.w	1
commando		ds.w	1
Mode			ds.b	1
signal			ds.b	1
drive			ds.b	1
io_error		ds.b	1
	even
diskio			ds.l	20
readreply		ds.l	8
memorymask		ds.l	1
filehandle		ds.l	1
lock			ds.l	1
virusmask		ds.l	1
keymask			ds.l	1
bigtask			ds.l	1
InputDevPort		ds.l	1

InputRequestBlock	ds.b	$30
	even
HandlerStuff		ds.b	$16
	even
dummy			ds.b	70
	even
userport	ds.l	1
myseg		ds.l	1
pcb_Input	ds.l	1
pcb_Output	ds.l	1

tempstatus	ds.b	1
status		ds.b	1
	even
stack		ds.l	256
checktask	ds.l	1


;=========================
;= The end of the source =
;=========================	





	end




