[comp.sources.amiga] v91i066: Bigbrother 2.11 - virus infection detector and more, Part01/01

amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (03/20/91)

Submitted-by: E. van Breemen <breemen@rulcvx.uucp>
Posting-number: Volume 91, Issue 066
Archive-name: utilities/bigbrother2.11/part01

[ includes uuencoded executable  ...tad ]

Bigbrother is a virus infection detection program with some optional
utilities. It is running as a normal task and checks every 1 second
the important memory locations in the Amiga. Depending on the values
and the their combinations, an expert system will accept it or warn
you in case it thinks it is dangerous. This means that no program
can start a virus in memory without alerting Bigbrother. 
As a bonus, Bigbrother is capable of starting a new shell, starting
script files, viewing and installing bootblocks. All this in a 
program less than 10K. 

#!/bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 1)."
# Contents:  F2 F3 bigbrother.asm bigbrother.doc bigbrother.uu bighelp
#   readme
# Wrapped by tadguy@ab20 on Wed Mar 20 09:22:24 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'F2' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'F2'\"
else
echo shar: Extracting \"'F2'\" \(6 characters\)
sed "s/^X//" >'F2' <<'END_OF_FILE'
Xxoper
END_OF_FILE
if test 6 -ne `wc -c <'F2'`; then
    echo shar: \"'F2'\" unpacked with wrong size!
fi
# end of 'F2'
fi
if test -f 'F3' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'F3'\"
else
echo shar: Extracting \"'F3'\" \(5 characters\)
sed "s/^X//" >'F3' <<'END_OF_FILE'
Xvex
X
END_OF_FILE
if test 5 -ne `wc -c <'F3'`; then
    echo shar: \"'F3'\" unpacked with wrong size!
fi
# end of 'F3'
fi
if test -f 'bigbrother.asm' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'bigbrother.asm'\"
else
echo shar: Extracting \"'bigbrother.asm'\" \(42429 characters\)
sed "s/^X//" >'bigbrother.asm' <<'END_OF_FILE'
X;====================================================================
X;= Big Brother V2.11 by The Orega Programming Group Holland (c)1989 =
X;= Programmer: EA van Breemen					    =
X;= Assembler : DevPac 2.14                                          =
X;====================================================================
X	
X;====================================================================
X;= Modifications:						    =
X;= 24-1-90:   fixed ctrl-Help bug				    =
X;=            added newcli					    =
X;=            optimized coding					    =
X;= 26-1-90:   added newcli gadget				    =
X;=            modified tekstborder				    =
X;=            fixed 'system has been modified' tekst bug	    =
X;= 27-1-90:   fixed AlertWarning				    =
X;=            adjusted some windowsizes				    =
X;=            intuified viewbootblocktekst			    =
X;=            regulated bootio errors				    =
X;=            added help					    =
X;=            added preferences					    =
X;= 21-10-90   fixed the memory clean message update bug             =
X;=            added script options                                  = 
X;= 23-10-90   make auto detaching				    =
X;= 24-10-90   fixed another clean message box bug		    =
X;=	      added ReBoot routine				    =   
X;= 25-10-90   BigBrother is now using the official reboot           =
X;= 27-10-90   Fixed the endcli bug				    =
X;= 01-12-90   Fixed multiple selection bug. BB replies to all       =
X;=            messages first before next Wait			    =
X;=            Version 2.11 Final release.                           = 
X;====================================================================
X
X	
XXLIB	macro
X	xref	_LVO\1
X	endm
X
X
XMEMORY		equ	$1
XVIEW		equ	$2
XCLEAR		equ	$3
XINSTALL		equ	$4
XDRIVE		equ	$5
XWATCH		equ	$6
XNEWSHELL	equ	$7
XHELP		equ	$8
XREBOOT		equ	$9
X
X
XREAD		equ	$2
XWRITE		equ	$3
X
X
XIECLASS_RAWKEY		equ	$01
XIEQUALIFIER_CONTROL 	equ	$08
X
XHELP_KEY		equ	$5f
XFUNC_F1			equ	$50
XFUNC_F2			equ	$51
XFUNC_F3			equ	$52
XFUNC_F4			equ	$53
XFUNC_F5			equ	$54
XFUNC_F6			equ	$55
XFUNC_F7			equ	$56
XFUNC_F8			equ	$57
XFUNC_F9			equ	$58
XFUNC_F10		equ	$59
X
X
X
XIND_ADDHANDLER		equ	$09
XNT_MESSAGE		equ	$05
XNT_MSGPORT		equ	$04
XPA_SIGNAL		equ	$00
Xio_Message		equ	$00
Xio_Data			equ	$28
Xio_Command		equ	$1c
XLn_Type			equ	$08
XLn_Name			equ	$0a
XLn_Pri			equ	$09
Xmp_Node			equ	$00
Xmp_SigBit		equ	$0f
Xmp_Flags		equ	$0e
Xmp_SigTask		equ	$10
Xmn_Node			equ	$00
Xmn_Length		equ	$12
Xmn_ReplyPort		equ	$0e
X
Xgg_GadgetID		equ	$26
X
Xim_Class		equ	$14
Xim_Code			equ	$18
Xim_Address		equ	$1c
X
Xwd_UserPort		equ	$56
Xwd_RPort		equ	$32
X
XWindowPtr		equ	$b8
X
Xis_Code			equ	$12
Xis_Data			equ	$0e
Xis_Node			equ	$00
X
XGADGETUP		equ	$40
XGADGHNONE		equ	$03
XCLOSEWINDOW		equ	$200
XWINDOWDRAG		equ	$02
XWINDOWDEPTH		equ	$04
XWINDOWCLOSE		equ	$08
XACTIVATE		equ	$1000
XNOCAREREFRESH		equ	$20000
XWBENCHSCREEN		equ	$01
XRELVERIFY		equ	$01
XBOOLGADGET		equ	$01
XRP_JAM1			equ	$00
XRP_JAM2			equ	$01
X
XTD_CHANGESTATE		equ	14
X
XNULL			equ	$00
X
XMAGIC_ROMEND	    EQU $01000000   ;End of Kickstart ROM
XMAGIC_SIZEOFFSET    EQU -$14	    ;Offset from end of ROM to Kickstart size
XV36_EXEC	    EQU 36	    ;Exec with the ColdReboot() function
XTEMP_ColdReboot     EQU -726	    ;Offset of the V36 ColdReboot function
XLIB_VERSION	EQU	$14
X
X
X	XLIB	OpenLibrary
X	XLIB	CloseLibrary
X	XLIB	OpenDevice
X	XLIB	CloseDevice
X	XLIB	OpenWindow
X	XLIB	CloseWindow
X	XLIB	DoIO
X	XLIB	Delay
X	XLIB	GetMsg
X	XLIB	ReplyMsg
X	XLIB	AllocSignal
X	XLIB	FreeSignal
X	XLIB	FindTask
X	XLIB	AddPort
X	XLIB	RemPort
X	XLIB	FindName
X	XLIB	DeviceProc
X	XLIB	RefreshGadgets
X	XLIB	Wait
X	XLIB	Move
X	XLIB	Text
X	XLIB	SetAPen
X	XLIB	AllocMem
X	XLIB	FreeMem
X	XLIB	SetWindowTitles
X	XLIB	FindResident
X	XLIB	RemTask
X	XLIB	DisplayBeep
X	XLIB	Disable
X	XLIB	Enable
X	XLIB	DrawBorder
X	XLIB	PrintIText
X	XLIB	WBenchToFront
X	XLIB	DisplayAlert
X	XLIB	SizeWindow
X	XLIB	WaitPort
X	XLIB	Open
X	XLIB	Close
X	XLIB	Read
X	XLIB	Lock
X	XLIB	UnLock
X	XLIB	Execute
X	XLIB	CreateProc
X	XLIB	WaitPort
X	XLIB	Supervisor	
X	XLIB	Write
X	XLIB	Output
X
X_ASyncRun	equ	-$222
XSTACK_SIZE	equ	4096
X
X
X
X;===================================
X;= Startup code for auto detaching =
X;= BigBrother V2.11                =
X;===================================
X
X	
X	section	"Startup",code
X
Xstart	move.l	$4,a6
X	sub.l	a1,a1
X	jsr	_LVOFindTask(a6)
X	move.l	d0,a4
X	tst.l	$ac(a4)			; Are we from the WBench ????
X	bne.s	from_cli
X	lea.l	$5c(a4),a0
X	jsr	_LVOWaitPort(a6)
X	jsr	_LVOGetMsg(a6)		; Get message
Xfrom_cli:
X	move.l	$4,a6
X	lea.l	DosName,a1
X	clr.l	d0
X	jsr	_LVOOpenLibrary(a6)
X	move.l	d0,a5
X	beq	uit
X	move.l	a5,a6
X	jsr	_LVOOutput(a6)
X	move.l	d0,d1
X	move.l	#Title,d2
X	move.l	#80,d3
X	jsr	_LVOWrite(a6)
X	move.l	#NIL_NAME,d1
X	move.l	#1006,d2
X	jsr	_LVOOpen(a6)
X	move.l	d0,pcb_Input
X	move.l	d0,pcb_Output
X	
X
X	move.l	$4,a6
X	lea.l	ArpName,a1
X	clr.l	d0
X	jsr	_LVOOpenLibrary(a6)
X	move.l	d0,ArpBase
X	bne	1$
X	bra	2$
X1$	move.l	ArpBase,a6
X	move.l	#0,a0
X	move.l	#0,a1
X	lea.l	newshell2,a2
X	jsr	_ASyncRun(a6)
X	move.l	$4,a6
X	move.l	ArpBase,a1
X	jsr	_LVOCloseLibrary(a6)	; Close Arp
X
X	lea.l	start,a0
X	move.l	#0,-4(a0)		; Erase pointer to next segment
X	
X2$	move.l	$4,a6
X	move.l	a5,a1
X	jsr	_LVOCloseLibrary(a6)
X
Xuit	rts
X
X
X
X	data
X
XTitle	dc.b	'BigBrother V2.11 ',169,'1990 by EA van Breemen',10,13
X	dc.b	'The Orega Programming Group Holland.',10,13,0
X	
X	even
X
XNewWindowStructure1:
X	dc.w	62,30
X	dc.w	330,126
X	dc.b	0,1
X	dc.l	GADGETUP+CLOSEWINDOW
X	dc.l	WINDOWDRAG+WINDOWDEPTH+WINDOWCLOSE+ACTIVATE+NOCAREREFRESH
X	dc.l	Gadget1
X	dc.l	NULL
X	dc.l	CopyrightName
X	dc.l	NULL
X	dc.l	NULL
X	dc.w	5,5
X	dc.w	-1,-1
X	dc.w	WBENCHSCREEN
XNewWindowStructure2:
X	dc.w	0,0
Xhsize	dc.w	550,150
X	dc.b	0,1
X	dc.l	CLOSEWINDOW
X	dc.l	ACTIVATE+NOCAREREFRESH+WINDOWCLOSE
X	dc.l	NULL
X	dc.l	NULL
Xtitle2	dc.l	InitTitle
X	dc.l	NULL
X	dc.l	NULL
X	dc.w	5,5
X	dc.w	-1,-1
X	dc.w	WBENCHSCREEN
XCopyrightName:
X	dc.b 'Big Brother V2.11',0
X	dc.b	' ',169,'1989/1990',0
X	cnop 0,2
XInitTitle:
X	dc.b	'BootBlock:',0
X	even
XViewTitle:
X	dc.b	'Contents of ExecBase:',0
X	even
XInstallTitle:
X	dc.b	'Installing BootBlock',0
X	even
XHelpTitle:
X	dc.b	'Help',0
X	even
Xinstall_message:
X	dc.b	'Disk has been installed',0
X	even
Xinstall_fail:
X	dc.b	'Install has failed',0
X	even
Xdisk_protected:
X	dc.b	'Disk is write-protected!',0
X	even
Xdisk_changed:
X	dc.b	'Disk has been removed!',0
X	even
XStandardBootBlock:
X	dc.b	'Standard BootBlock by The Orega Programming Group Holland.'
X	dc.b    ' Copyright 1989,1990. Installed by Big Brother V2.11'
XStandardend:
X	even
Xprefs_file:
X	dc.b	's:big_prefs',0
X	even
XGadget1:
X	dc.l	Gadget2
X	dc.w	29,22
X	dc.w	80,15
X	dc.w	GADGHNONE
X	dc.w	RELVERIFY
X	dc.w	BOOLGADGET
X	dc.l	Border1
X	dc.l	NULL
X	dc.l	IText1
X	dc.l	NULL
X	dc.l	NULL
X	dc.w	DRIVE
X	dc.l	NULL
XBorder1:
X	dc.w	0,0
X	dc.b	2,0,RP_JAM2
X	dc.b	5
X	dc.l	BorderVectors1
X	dc.l	Border1a
XBorder1a:
X	dc.w	-1,-1
X	dc.b	1,0,RP_JAM1
X	dc.b	5
X	dc.l	BorderVectors1
X	dc.l	NULL
XBorderVectors1:
X	dc.w	0,0
X	dc.w	80,0
X	dc.w	80,15
X	dc.w	0,15
X	dc.w	0,0
X
X;======== Custom Drawing =======================
X
XBorder2:
X	dc.w	30,96
X	dc.b	2,0,RP_JAM2
X	dc.b	5
X	dc.l	BorderVectors2
X	dc.l	Border3
XBorder3:
X	dc.w	28,95
X	dc.b	1,0,RP_JAM1
X	dc.b	5
X	dc.l	BorderVectors2
X	dc.l	NULL
XBorderVectors2:			; Tekstbox of mainwindow
X	dc.w	0,0
X	dc.w	283,0
X	dc.w	283,26
X	dc.w	0,26
X	dc.w	0,0
XMyTekst:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	45,110
X	dc.l	NULL
XMt1	dc.l	NULL
X	dc.l	MyTekst2
XMyTekst2:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	44,109
X	dc.l	NULL
XMt2	dc.l	NULL
X	dc.l	NULL
XMyTekst3:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	45,100
X	dc.l	NULL
XMt3	dc.l	NULL
X	dc.l	MyTekst4
XMyTekst4:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	44,99
X	dc.l	NULL
XMt4	dc.l	NULL
X	dc.l	NULL
X
X
X;=====================================================
X;= IntuiText structures for clearing the message box =
X;=====================================================
X
XMyTekst3a:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	45,100
X	dc.l	NULL
X	dc.l	L10
X	dc.l	MyTekst4a
XMyTekst4a:
X	dc.b	1,0,RP_JAM2,0
X	dc.w	44,99
X	dc.l	NULL
X	dc.l	L10
X	dc.l	MyTekst3b
XMyTekst3b:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	45,110
X	dc.l	NULL
X	dc.l	L10
X	dc.l	MyTekst4b
XMyTekst4b:
X	dc.b	1,0,RP_JAM2,0
X	dc.w	44,109
X	dc.l	NULL
X	dc.l	L10
X	dc.l	NULL
X
X
X
XMyTekst5:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	40,25
X	dc.l	NULL
XMt5	dc.l	NULL
X	dc.l	MyTekst6
XMyTekst6:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	39,24
X	dc.l	NULL
XMt6	dc.l	NULL
X	dc.l	NULL
X
X;=====================================
X
X
XIText1:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	21,3
X	dc.l	NULL
X	dc.l	DummyTekst
X	dc.l	IText1a
XIText1a:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	22,4
X	dc.l	NULL
X	dc.l	ITextText1
X	dc.l	IText1b
XIText1b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	21,3
X	dc.l	NULL
X	dc.l	ITextText1
X	dc.l	NULL
X
XITextText1:
X	dc.b	'DF0:',0
X	cnop 0,2
XDummyTekst:
X	dc.b	'    ',0
X	cnop 0,2
XGadget2:
X	dc.l	Gadget3
X	dc.w	128,46
X	dc.w	80,15
X	dc.w	NULL
X	dc.w	RELVERIFY
X	dc.w	BOOLGADGET
X	dc.l	Border1
X	dc.l	NULL
X	dc.l	IText2
X	dc.l	NULL
X	dc.l	NULL
X	dc.w	MEMORY
X	dc.l	NULL
XIText2:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	15,4
X	dc.l	NULL
X	dc.l	ITextText2
X	dc.l	IText2b
XIText2b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	14,3
X	dc.l	NULL
X	dc.l	ITextText2
X	dc.l	NULL
XITextText2:
X	dc.b	'Memory',0
X	cnop 0,2
XGadget3:
X	dc.l	Gadget4
X	dc.w	229,22
X	dc.w	80,15
X	dc.w	NULL
X	dc.w	RELVERIFY
X	dc.w	BOOLGADGET
X	dc.l	Border1
X	dc.l	NULL
X	dc.l	IText3
X	dc.l	NULL
X	dc.l	NULL
X	dc.w	INSTALL
X	dc.l	NULL
X
XIText3:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	13,4
X	dc.l	NULL
X	dc.l	ITextText3
X	dc.l	IText3b
XIText3b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	12,3
X	dc.l	NULL
X	dc.l	ITextText3
X	dc.l	NULL
XITextText3:
X	dc.b	'Install',0
X	cnop 0,2
XGadget4:
X	dc.l	Gadget5
X	dc.w	29,46
X	dc.w	80,15
X	dc.w	NULL
X	dc.w	RELVERIFY
X	dc.w	BOOLGADGET
X	dc.l	Border1
X	dc.l	NULL
X	dc.l	IText4
X	dc.l	NULL
X	dc.l	NULL
X	dc.w	WATCH
X	dc.l	NULL
X
XIText4:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	22,4
X	dc.l	NULL
X	dc.l	ITextText4
X	dc.l	IText4b
XIText4b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	21,3
X	dc.l	NULL
X	dc.l	ITextText4
X	dc.l	NULL
XITextText4:
X	dc.b	'Watch',0
X	cnop 0,2
XGadget5:
X	dc.l	Gadget6
X	dc.w	229,46
X	dc.w	80,15
X	dc.w	NULL
X	dc.w	RELVERIFY
X	dc.w	BOOLGADGET
X	dc.l	Border1
X	dc.l	NULL
X	dc.l	IText5
X	dc.l	NULL
X	dc.l	NULL
X	dc.w	CLEAR
X	dc.l	NULL
X
XIText5:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	22,4
X	dc.l	NULL
X	dc.l	ITextText5
X	dc.l	IText5b
XIText5b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	21,3
X	dc.l	NULL
X	dc.l	ITextText5
X	dc.l	NULL
XITextText5:
X	dc.b	'Clear',0
X	cnop 0,2
XGadget6:
X	dc.l	Gadget7
X	dc.w	128,22
X	dc.w	80,15
X	dc.w	NULL
X	dc.w	RELVERIFY
X	dc.w	BOOLGADGET
X	dc.l	Border1
X	dc.l	NULL
X	dc.l	IText6
X	dc.l	NULL
X	dc.l	NULL
X	dc.w	VIEW
X	dc.l	NULL
X
XIText6:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	22,4
X	dc.l	NULL
X	dc.l	ITextText6
X	dc.l	IText6b
XIText6b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	21,3
X	dc.l	NULL
X	dc.l	ITextText6
X	dc.l	NULL
XITextText6:
X	dc.b	'View',0
X	even
X	
XGadget7:
X	dc.l	Gadget8
X	dc.w	29,70
X	dc.w	80,15
X	dc.w	NULL
X	dc.w	RELVERIFY
X	dc.w	BOOLGADGET
X	dc.l	Border1
X	dc.l	NULL
X	dc.l	IText7
X	dc.l	NULL
X	dc.l	NULL
X	dc.w	NEWSHELL
X	dc.l	NULL
XIText7:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	10,4
X	dc.l	NULL
X	dc.l	ITextText7
X	dc.l	IText7b
XIText7b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	9,3
X	dc.l	NULL
X	dc.l	ITextText7
X	dc.l	NULL
XITextText7:
X	dc.b	'NewShell',0
X	
X	even
XGadget8:
X	dc.l	Gadget9
X	dc.w	229,70
X	dc.w	80,15
X	dc.w	NULL
X	dc.w	RELVERIFY
X	dc.w	BOOLGADGET
X	dc.l	Border1
X	dc.l	NULL
X	dc.l	_IText8
X	dc.l	NULL
X	dc.l	NULL
X	dc.w	HELP
X	dc.l	NULL
X_IText8:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	23,4
X	dc.l	NULL
X	dc.l	_ITextText8
X	dc.l	_IText8b
X_IText8b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	22,3
X	dc.l	NULL
X	dc.l	_ITextText8
X	dc.l	NULL
X_ITextText8:
X	dc.b	'Help',0
X	
X	even
X
XGadget9:
X	dc.l	NULL
X	dc.w	128,70
X	dc.w	80,15
X	dc.w	NULL
X	dc.w	RELVERIFY
X	dc.w	BOOLGADGET
X	dc.l	Border1
X	dc.l	NULL
X	dc.l	_IT9
X	dc.l	NULL
X	dc.l	NULL
X	dc.w	REBOOT
X	dc.l	NULL
X_IT9:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	15,4
X	dc.l	NULL
X	dc.l	_ITT9
X	dc.l	_IT9b
X_IT9b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	14,3
X	dc.l	NULL
X	dc.l	_ITT9
X	dc.l	NULL
X_ITT9:
X	dc.b	'ReBoot',0
X	
X	even
X
X
X;======== Tekst structures for viewmemory ============
X
XIText8:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,26
X	dc.l	NULL
XMTE8	dc.l	NULL
X	dc.l	IText8b
XIText8b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,25
X	dc.l	NULL
XMTE8b	dc.l	NULL
X	dc.l	IText9
X
XIText9:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,36
X	dc.l	NULL
XMTE9	dc.l	NULL
X	dc.l	IText9b
XIText9b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,35
X	dc.l	NULL
XMTE9b	dc.l	NULL
X	dc.l	IText10
X
XIText10:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,46
X	dc.l	NULL
XMTE10	dc.l	NULL
X	dc.l	IText10b
XIText10b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,45
X	dc.l	NULL
XMTE10b	dc.l	NULL
X	dc.l	IText11
X
XIText11:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,56
X	dc.l	NULL
XMTE11	dc.l	NULL
X	dc.l	IText11b
XIText11b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,55
X	dc.l	NULL
XMTE11b	dc.l	NULL
X	dc.l	IText12
X
XIText12:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,66
X	dc.l	NULL
XMTE12	dc.l	NULL
X	dc.l	IText12b
XIText12b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,65
X	dc.l	NULL
XMTE12b	dc.l	NULL
X	dc.l	IText13
X
XIText13:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,81
X	dc.l	NULL
XMTE13	dc.l	NULL
X	dc.l	IText13b
XIText13b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,80
X	dc.l	NULL
XMTE13b	dc.l	NULL
X	dc.l	NULL
XIText14:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	10
Xy1	dc.w	0
X	dc.l	NULL
XMTE14	dc.l	dummy
X	dc.l	IText14b
XIText14b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	9
Xy2	dc.w	0
X	dc.l	NULL
XMTE14b	dc.l	dummy
X	dc.l	NULL
X
X;== Help strings =====================================
X
XText15:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,21
X	dc.l	NULL
X	dc.l	T15
X	dc.l	Text15b
XText15b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,20
X	dc.l	NULL
X	dc.l	T15
X	dc.l	Text16
XT15	dc.b	'This program is programmed by EA van Breemen',0
X	even
XText16:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,31
X	dc.l	NULL
X	dc.l	T16
X	dc.l	Text16b
XText16b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,30
X	dc.l	NULL
X	dc.l	T16
X	dc.l	Text17
XT16	dc.b	'Copyright by The Orega Programming Group Holland',0
X	even
XText17:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,41
X	dc.l	NULL
X	dc.l	T17
X	dc.l	Text17b
XText17b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,40
X	dc.l	NULL
X	dc.l	T17
X	dc.l	Text18
XT17	dc.b	169,'1989,1990. Any commercially based reproducing',0
X	even
XText18:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,51
X	dc.l	NULL
X	dc.l	T18
X	dc.l	Text18b
XText18b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,50
X	dc.l	NULL
X	dc.l	T18
X	dc.l	Text19
XT18	dc.b	'by any means of this shareware product is illegal.',0
X	even
XText19:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,61
X	dc.l	NULL
X	dc.l	T19
X	dc.l	Text19b
XText19b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,60
X	dc.l	NULL
X	dc.l	T19
X	dc.l	Text20
XT19	dc.b	'If you find this program usefull please send $10',0
X	even
XText20:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,71
X	dc.l	NULL
X	dc.l	T20
X	dc.l	Text20b
XText20b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,70
X	dc.l	NULL
X	dc.l	T20
X	dc.l	Text21
XT20	dc.b	'to: EA van Breemen, Berliozplein 15, 2651 VG',0
X	even
XText21:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,81
X	dc.l	NULL
X	dc.l	T21
X	dc.l	Text21b
XText21b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,80
X	dc.l	NULL
X	dc.l	T21
X	dc.l	Text22
XT21	dc.b	'Berkel en Rodenrijs,  Holland.',0
X	even
XText22:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,101
X	dc.l	NULL
X	dc.l	T22
X	dc.l	Text22b
XText22b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,100
X	dc.l	NULL
X	dc.l	T22
X	dc.l	Text23
XT22	dc.b	'Help:   Ctrl-F1   ..... NewShell',0
X	even
XText23:
X	dc.b	2,0,RP_JAM2,0
X	dc.w	11,111
X	dc.l	NULL
X	dc.l	T23
X	dc.l	Text23b
XText23b:
X	dc.b	1,0,RP_JAM1,0
X	dc.w	10,110
X	dc.l	NULL
X	dc.l	T23
X	dc.l	NULL
XT23	dc.b	'        Ctrl-HELP ..... BigBrother',0
X	even
X
X
X;=====================================================
X
Xexpert	dc.b	0,1,2,2,3,4,5,6,3,4,7
X	dc.b   	7,3,4,7,7,8,8,0,1,8,8
X	dc.b	5,5,8,8,7,7,8,8,7,7
X
X	even
X
Xconvtable	dc.b	'0123456789abcdef',0
X	even
X
Xmessage	dc.b	'This system has been modified.',0
XL0	dc.b	'Memory is clean.',0
XL1	dc.b	'Sca virus.',0
XL2	dc.b	'Unknown virus or not mounted rad.',0
XL3	dc.b	'Non reset virus.',0
XL4	dc.b	'Sca like virus.',0
XL5	dc.b	'Dasa virus.',0
XL6	dc.b	'Dasa like virus.',0
XL7	dc.b	'ByteBandit or Lamer virus.',0
XL8	dc.b	'Unknown system configuration???',0
XL9	dc.b	'System has not been modified. ',0
XL10	dc.b	'                                 ',0
X
X	even
X
XTaskName	dc.b	'RAD',0
X	even
Xdevicename	dc.b	'trackdisk.device',0
X	even
XMyPortName	dc.b	'BigBrother Port',0
X	even
Xerrormessage	dc.b	'BootBlock Read/Write Error.',0
X	even
Xfound_rad	dc.b	'RadTask has been found.',0
X	even
Xno_found_rad	dc.b	'RadTask has not been found.',0
X	even
Xloginfo	dc.b	 'Launched by BigBrother V2.11',10,0
X	even
XAlertstring	dc.w	170
X		dc.b	15
X		dc.b	'! ! ! ! !  W A R N I N G ! ! ! ! ! ',0
X		dc.b	1
X		dc.w	176
X		dc.b	27
X		dc.b	'Are you sure to clear the memory?',0
X		dc.b	1
X		dc.w	10
X		dc.b	39
X		dc.b	'Press <LEFT MOUSE BUTTON> for OK  ----  Press <RIGHT MOUSE BUTTON> for CANCEL',0
X		dc.b	0
X	even
XAlertstring2	dc.w	170
X		dc.b	15
X		dc.b	'! ! ! ! !  W A R N I N G ! ! ! ! ! ',0
X		dc.b	1
X		dc.w	176
X		dc.b	27
X		dc.b	'Are you sure you want to Reboot? ',0
X		dc.b	1
X		dc.w	10
X		dc.b	39
X		dc.b	'Press <LEFT MOUSE BUTTON> for OK  ----  Press <RIGHT MOUSE BUTTON> for CANCEL',0
X		dc.b	0
X	even
X
X;================
X;= Library data =
X;================
X
XDosName	dc.b	'dos.library',0
X	cnop 0,2
XIntuitionName 	dc.b 'intuition.library',0
X	cnop 0,2
XGraphicsName 	dc.b 'graphics.library',0
X	cnop 0,2
XArpName	dc.b	'arp.library',0
X	even
Xcoldcapture	dc.b	'ColdCapture - Offset   42 :$',0
Xcoolcapture	dc.b	'CoolCapture - Offset   46 :$',0
Xkickmemptr	dc.b	'KickMemPtr  - Offset  546 :$',0
Xkicktagptr	dc.b	'KickTagPtr  - Offset  550 :$',0
Xdoio_vector	dc.b	'DoIO Vector - Offset -454 :$',0
X
Xnumber		dc.b	'00000000',0
X	even
X
XBIG_NAME	dc.b	'BigBrother',0
X	even
XNIL_NAME	dc.b	'NIL:',0
X	even
X
Xscript2		dc.b	'Execute s:F2',0
Xscript3		dc.b	'Execute s:F3',0
Xscript4		dc.b	'Execute s:F4',0
Xscript5		dc.b	'Execute s:F5',0
Xscript6		dc.b	'Execute s:F6',0
Xscript7		dc.b	'Execute s:F7',0
Xscript8		dc.b	'Execute s:F8',0
Xscript9		dc.b	'Execute s:F9',0
Xscript10	dc.b	'Execute s:F10',0
X
X
X
X;=====================
X;= Input Device data =
X;=====================
X
XInputDeviceName	dc.b	'input.device',0
X	even
X
X
X
Xdf0	dc.l	'DF0:'
Xdf1	dc.l	'DF1:'
Xdf2	dc.l	'DF2:'
Xdf3	dc.l	'DF3:'
X
X	dc.b	'    DoIO vector:'
X	even
XDoIOVector	dc.l	$fc06dc		; DoIO Vector for V1.2
X
X;=======================
X;= Arp data structures =
X;=======================
X
Xnewshell:				; Process control structure for Arp
X	
Xnsh_StackSize	dc.l	4000	; Stacksize for new process
Xnsh_Pri		dc.b	0 	; Priority of new process
Xnsh_Control	dc.b	128+8	; Make a newshell
Xnsh_LogMsg	dc.l	loginfo
Xnsh_Input	dc.l	0	; Optional default input
Xnsh_Output	dc.l	0	; Optional default output
Xnsh_Reserved	ds.l	5	; Extra
X
XCONNAME	dc.b	'CON:0/0/639/75/The Orega Programming Group Holland',0
X	even
X
Xnewshell2:				; Process control structure for Arp
X	
Xpcb_StackSize	dc.l	4000	; Stacksize for new process
Xpcb_Pri		dc.b	0 	; Priority of new process
Xpcb_Control	dc.b	16	; Make a background cli
Xpcb_TrapCode	dc.l	0
Xpcb_Input	dc.l	0	; Optional default input
Xpcb_Output	dc.l	0	; Optional default output
Xpcb_Console	dc.l	CONNAME	; Union
Xpcb_LoadedCode	dc.l	mymain
Xpcb_lastGasp	dc.l	0
Xpcb_WBProcess	dc.l	0
X
X	even
X	bss
X
XDOSBase			ds.l	1
XGfxBase			ds.l	1
XIntuitionBase		ds.l	1
XArpBase			ds.l	1
Xwindow			ds.l	1
Xwindow2			ds.l	1
Xrp			ds.l	1
Xrp2			ds.l	1
Xbuffer			ds.l	1
Xkeyfound		ds.w	1
Xcommando		ds.w	1
XMode			ds.b	1
Xsignal			ds.b	1
XFlag			ds.b	1
Xdrive			ds.b	1
Xio_error		ds.b	1
X	even
Xdiskio			ds.l	20
Xreadreply		ds.l	8
Xmemorymask		ds.l	1
Xfilehandle		ds.l	1
Xlock			ds.l	1
XInputRequestBlock	ds.b	$30
X	even
XInputDevPort		ds.b	$22
X	even
XHandlerStuff		ds.b	$16
X	even
Xdummy			ds.b	70
X	even
Xuserport	ds.l	1
X	code
X
X;=======================================
X;= Initialisation code for Big Brother =
X;=======================================
Xmymain	move.l	$4,a6
X	lea.l	DosName,a1
X	clr.l	d0
X	jsr	_LVOOpenLibrary(a6)
X	move.l	d0,DOSBase
X	beq	nodos
X	bsr	loadprefs
X	move.l	$4,a6
X	clr.l	d0
X	lea.l	IntuitionName,a1
X	jsr	_LVOOpenLibrary(a6)
X	move.l	d0,IntuitionBase
X	beq	nointuition
X	clr.l	d0
X	lea.l	GraphicsName,a1
X	jsr	_LVOOpenLibrary(a6)
X	move.l	d0,GfxBase
X	beq	nographics
X
X	bsr.s	initall			; Open inputdevice etc.
X	bra	check			; Jump to checkroutine
X	
X
X;==================================
X;= loadprefs: tries to load prefs =
X;==================================
Xloadprefs:
X	move.l	DOSBase,a6
X	move.l	#prefs_file,d1
X	move.l	#-2,d2
X	jsr	_LVOLock(a6)
X	move.l	d0,lock
X	beq	no_prefs
X	move.l	#prefs_file,d1
X	move.l	#1005,d2
X	jsr	_LVOOpen(a6)
X	move.l	d0,filehandle
X	move.l	d0,d1
X	move.l	#DoIOVector,d2
X	moveq	#4,d3
X	jsr	_LVORead(a6)
X	move.l	filehandle,d1
X	jsr	_LVOClose(a6)
X	move.l	lock,d1
X	jsr	_LVOUnLock(a6)
Xno_prefs:
X	rts
X	
X
X;=============================================
X;= Routine to install a input device handler =
X;=============================================
X
X
Xinitall:					; Open inputdevice
X	move.b	#0,signal
X	move.b	#0,Flag
X	move.b	#0,drive			; df0: is default
X
X	move.l	$4,a6			; Make a message port
X	moveq	#-1,d0
X	jsr	_LVOAllocSignal(a6)
X	lea.l	InputDevPort,a0
X	move.b	d0,mp_SigBit(a0)
X	move.b	#0,mp_Node+Ln_Pri(a0)
X	move.b	#NT_MSGPORT,mp_Node+Ln_Type(a0)
X	move.l	#MyPortName,mp_Node+Ln_Name(a0)
X	move.b	#PA_SIGNAL,mp_Flags(a0)
X	sub.l	a1,a1
X	jsr	_LVOFindTask(a6)
X	move.l	d0,a3
X	move.l	#-1,WindowPtr(a3)	; I don't want requesters
X	lea.l	InputDevPort,a0
X	move.l  d0,mp_SigTask(a0)
X	move.l	a0,a1
X	jsr	_LVOAddPort(a6)
X
X	lea.l	InputRequestBlock,a0
X	move.b	#NT_MESSAGE,io_Message+mn_Node+Ln_Type(a0)
X	move.w	#$30,io_Message+mn_Length(a0)
X	lea.l	InputDevPort,a1
X	move.l	a1,io_Message+mn_ReplyPort(a0)
X
X	lea.l	HandlerStuff,a1
X	move.l	#myhandler,is_Code(a1)
X	move.b	#127,is_Node+Ln_Pri(a1)
X	move.l	#0,is_Data(a1)
X	
X	lea.l	InputRequestBlock,a1
X	lea.l	InputDeviceName,a0
X	clr.l	d0
X	clr.l	d1
X	jsr	_LVOOpenDevice(a6)
X
X	lea.l	InputRequestBlock,a0
X	move.w	#IND_ADDHANDLER,io_Command(a0)
X	move.l	#HandlerStuff,io_Data(a0)
X	move.l	a0,a1
X	jsr	_LVODoIO(a6)		; Install handler
X
X	rts
X	
X;====================================
X;=    Code for checking the Amiga   =
X;====================================
X
X
Xcheck	bsr	checkevents		; Any messages ???
X	bsr.s	chlus			; Check routine
X	move.l	DOSBase,a6
X	moveq	#50,d1
X	jsr	_LVODelay(a6)
X	bra.s	check
X
Xchlus	move.l	$4,a0
X	move.l	a0,a6
X	clr.l	d2
X	tst.l	42(a0)
X	beq.s	1$
X	ori.l	#1,d2
X1$	tst.l	46(a0)
X	beq.s	2$
X	ori.l	#1,d2
X2$	tst.l	546(a0)
X	beq.s	3$
X	ori.l	#2,d2
X3$	tst.l	550(a0)
X	beq.s	4$
X	ori.l	#2,d2
X4$	lea.l	350(a0),a0
X	lea.l	devicename,a1
X	move.l	$4,a6	
X 	jsr	_LVOFindName(a6)
X	move.l	d0,a0
X	move.l	-28(a0),d1
X	cmp.l	#$fc0000,d1
X	bhs.s	5$
X	ori.l	#8,d2
X5$	move.l	$4,a0
X	move.l	-454(a0),d1
X	cmp.l	DoIOVector,d1
X	beq.s	6$
X	ori.l	#4,d2
X6$	lea.l	TaskName,a1
X	jsr	_LVOFindTask(a6)
X	tst.l	d0
X	beq.s	7$
X	ori.l	#16,d2
X7$	andi.l	#31,d2
X	move.l	d2,memorymask
X	moveq	#0,d0
X	lea.l	expert,a0
X	move.b	0(a0,d2),d0
X	cmp.b	#0,d0
X	beq.s	novirus
X	cmp.b	#2,d0
X	beq.s	novirus
X	move.b	d0,signal
Xnovirus
X	rts
X	
X		
X;======================================================
X;= The Input Device Handler for checking the Help Key =
X;======================================================
X
Xmyhandler			; The input_handler
X	cmp.b	#IECLASS_RAWKEY,4(a0)
X	beq.s	akey
Xnoop	move.l	a0,d0		; Return head of list
X	rts
Xakey	move.w	8(a0),d0
X	and.w	#IEQUALIFIER_CONTROL,d0		; Mask Control bit
X	beq.s	noop				; None of my keys
X	cmp.w	#HELP_KEY,6(a0)
X	bne.s	1$		; Check next key
X	move.w	#HELP_KEY,keyfound
X	bra	needed
X1$	cmp.w	#FUNC_F1,6(a0)
X	bne.s	2$
X	move.w	#FUNC_F1,keyfound
X	bra	needed
X2$	cmp.w	#FUNC_F2,6(a0)
X	bne.s	3$
X	move.w	#FUNC_F2,keyfound
X	bra	needed
X3$	cmp.w	#FUNC_F3,6(a0)
X	bne.s	4$
X	move.w	#FUNC_F3,keyfound
X	bra	needed
X4$	cmp.w	#FUNC_F4,6(a0)
X	bne.s	5$
X	move.w	#FUNC_F4,keyfound
X	bra	needed
X5$	cmp.w	#FUNC_F5,6(a0)
X	bne.s	6$
X	move.w	#FUNC_F5,keyfound
X	bra	needed
X6$	cmp.w	#FUNC_F6,6(a0)
X	bne.s	7$
X	move.w	#FUNC_F6,keyfound
X	bra	needed
X7$	cmp.w	#FUNC_F7,6(a0)
X	bne.s	8$
X	move.w	#FUNC_F7,keyfound
X	bra	needed
X8$	cmp.w	#FUNC_F8,6(a0)
X	bne.s	9$
X	move.w	#FUNC_F8,keyfound
X	bra	needed
X9$	cmp.w	#FUNC_F9,6(a0)
X	bne.s	10$
X	move.w	#FUNC_F9,keyfound
X	bra	needed
X10$	cmp.w	#FUNC_F10,6(a0)
X	bne	noop
X	move.w	#FUNC_F10,keyfound
Xneeded	move.b	#1,Flag		; Big Brother Control Window is needed !
X	move.l	(a0),a0
X	cmp.l	#0,a0
X	beq.s	out
X	bra	myhandler	; Process more events !
Xout	clr.l	d0		; End of chain
X	rts
X
X;=====================================================
X;= Checks if an event has occured and responds to it =
X;=====================================================
X	
Xcheckevents
X	clr.l	d0
X	move.b	signal,d0
X	beq.s	no_virus_signal
X	cmp.b	#2,d0
X	beq.s	no_virus_signal
X	bra.s	activate	; Open window etc., a virus !!!
Xno_virus_signal:
X	move.b	Flag,d0
X	beq.s	1$		; No keys has been pressed
X	move.w	keyfound,d0
X	cmp.w	#FUNC_F1,d0
X	beq	newcli		; Spawn a cli
X	cmp.w	#HELP_KEY,d0
X	beq.s	activate
X	bra	do_function_keys
X1$	rts
X
X;=========================================================
X;= Routine for the window processing in case of an event =
X;=========================================================
X
Xactivate
X	move.l	IntuitionBase,a6
X	jsr	_LVOWBenchToFront(a6)
X	move.l	#NewWindowStructure1,a0
X	jsr	_LVOOpenWindow(a6)
X	move.l	d0,window
X	move.l	d0,a0
X	move.l	wd_RPort(a0),rp
X	move.l	rp,a0
X	move.l	#Border2,a1
X	moveq	#0,d0
X	moveq	#0,d1
X	jsr	_LVODrawBorder(a6)	
X	bsr	printstatus
Xwaitloop:
X	move.l	window,a0
X	move.l	wd_UserPort(a0),a0
X	move.l	a0,userport
X	moveq	#0,d1
X	move.b	mp_SigBit(a0),d1
X	moveq	#1,d0
X	asl.l	d1,d0
X	move.l	$4,a6
X	jsr	_LVOWait(a6)	; Wait for an event
Xlook	move.l	$4,a6
X	move.l	userport,a0	; Get UserPort
X	jsr	_LVOGetMsg(a6)	; Get Message from IDCMP Port
X	tst.l	d0
X	beq	waitloop	; No more messages left
X	move.l	d0,a1
X	move.l	im_Class(a1),d4
X	move.l	im_Code(a1),d5
X	move.l	im_Address(a1),a2
X	jsr	_LVOReplyMsg(a6) ; Reply the message
X
X	cmp.l	#CLOSEWINDOW,d4
X	beq.s	watchmode
X	cmp.l	#GADGETUP,d4
X	bne.s	look
X
X	bsr.s	process_gadgets	; Someone has pressed a gadget
X	cmp.w	#WATCH,d0
X	bne.s	look
X
Xwatchmode:
X	move.l	IntuitionBase,a6
X	move.l	window,a0
X	jsr	_LVOCloseWindow(a6)
X	move.b	#0,Flag
X	move.b	#0,signal
X	rts
X
X;==================================
X;= Routine for processing Gadgets =
X;==================================
X
Xprocess_gadgets:
X	move.w	gg_GadgetID(a2),d0
X	cmp.w	#WATCH,d0
X	bne.s	1$
X	rts
X1$	cmp.w	#DRIVE,d0
X	beq.s	nextdrive
X	cmp.w	#CLEAR,d0
X	beq	clearmemory
X	cmp.w	#VIEW,d0
X	beq	viewbootblock
X	cmp.w	#INSTALL,d0
X	beq	installdisk
X	cmp.w	#MEMORY,d0
X	beq	viewmemory
X	cmp.w	#NEWSHELL,d0
X	beq	newcli
X	cmp.w	#HELP,d0
X	beq	showhelp
X	cmp.w	#REBOOT,d0
X	beq	reboot
X	clr.l	d0		; Clear d0 if GadgetID <> WATCH
X	rts
X
X;==============================
X;= Finds next available drive =
X;==============================
X
Xnextdrive:
X	move.b	drive,d0
X	addq	#1,d0
X	cmp.b	#4,d0		; drive number too high ???
X	bne.s	1$
X	moveq	#0,d0		; just select df0:
X1$	cmp.b	#0,d0
X	bne.s	2$
X	move.l	df0,ITextText1
X2$	cmp.b	#1,d0
X	bne.s	3$
X	move.l	df1,ITextText1
X3$	cmp.b	#2,d0
X	bne.s	4$
X	move.l	df2,ITextText1
X4$	cmp.b	#3,d0
X	bne.s	5$
X	move.l	df3,ITextText1
X5$	move.b	d0,drive
X	move.l	#ITextText1,d1
X	move.l	DOSBase,a6
X	jsr	_LVODeviceProc(a6)	; Does drive exists ?
X	tst.l	d0
X	bne.s	6$		; Yeah
X	bra.s	nextdrive	; Try next drive
X6$	move.l	#Gadget1,a0
X	move.l	window,a1
X	move.l	#0,a2
X	move.l	IntuitionBase,a6
X	jsr	_LVORefreshGadgets(a6)
X	clr.l	d0
X	rts
X
X;================================
X;= Clears memory area from viri =
X;================================
X
Xclearmemory:
X	bsr	yesno			; Are you sure????
X	tst.l	d0
X	beq	clearexit		; Noop
X	move.l	$4,a6
X	jsr	_LVODisable(a6)
X	lea.l	TaskName,a1
X	jsr	_LVOFindTask(a6)
X	tst.l	d0
X	beq.s	1$			; No rad
X	move.l	d0,a1
X	jsr	_LVORemTask(a6)		; Kill it!!!
X1$	move.l	$4,a6
X	clr.l	42(a6)
X	clr.l	46(a6)
X	clr.l	546(a6)
X	clr.l	550(a6)
X	clr.l	554(a6)
X	move.l	DoIOVector,-454(a6)
X	clr.l	d1
X	lea.l	34(a6),a0
X	move.w	#$16,d0
Xloop	add.w	(a0)+,d1
X	dbf	d0,loop
X	not.w	d1
X	move.w	d1,82(a6)
X	jsr	_LVOEnable(a6)
X	move.l	IntuitionBase,a6
X	move.l	#0,a0
X	jsr	_LVODisplayBeep(a6)
X	move.l	$4,a6
X	move.b	#0,signal
X	bsr	chlus			; Check memory
X	bsr	printstatus		; Show current memory status
Xclearexit:
X	clr.l 	d0			; No WATCH Gadget
X	rts
X
X;====================================
X;= Are you sure to clear memory???? =
X;====================================
X
Xyesno:
X	move.l	IntuitionBase,a6
X	move.l	#0,d0
X	move.l	#Alertstring,a0
X	move.l	#50,d1
X	jsr	_LVODisplayAlert(a6)
X	rts
X
X;====================================
X;= Are you sure to reboot????       =
X;====================================
X
Xyesno2:
X	move.l	IntuitionBase,a6
X	move.l	#0,d0
X	move.l	#Alertstring2,a0
X	move.l	#50,d1
X	jsr	_LVODisplayAlert(a6)
X	rts
X
X
X
X
X
X;==================================================
X;= Routine shows a bootblock in ascii in a window =
X;==================================================
X
Xviewbootblock:
X	move.w	#534,hsize		; Adjust windowwidth
X	move.w	#150,hsize+2		; Adjust height
X	lea.l	InitTitle,a0
X	move.l	a0,title2
X	move.l	IntuitionBase,a6
X	move.l	#NewWindowStructure2,a0
X	jsr	_LVOOpenWindow(a6)
X	move.l	d0,window2
X	move.l	d0,a0
X	move.l	wd_RPort(a0),rp2
X
X	move.l	$4,a6
X	move.l	#1024,d0
X	moveq	#2,d1			; Chip memory needed
X	jsr	_LVOAllocMem(a6)	; Allocate buffer for bootblock
X	move.l	d0,buffer
X	
X	bsr	readbootblock
X	move.b	io_error,d0
X	cmp.b	#29,d0
X	bne	1$			; Disk is available
X
X	move.l	window2,a0
X	move.l	#-234,d0
X	move.l	#-100,d1
X	move.l	IntuitionBase,a6
X	jsr	_LVOSizeWindow(a6)	; Make window smaller
X	move.l	#disk_changed,Mt5
X	move.l	#disk_changed,Mt6
X	move.l	rp2,a0
X	clr.l	d0
X	clr.l	d1
X	move.l	#MyTekst5,a1
X	jsr	_LVOPrintIText(a6)	; No disk !
X	bra	2$			; skip printbuffer
X
X
X1$	bsr	printbuffer
X
X2$	move.l	buffer,a1
X	move.l	#1024,d0
X	move.l	$4,a6
X	jsr	_LVOFreeMem(a6)		; Free buffer for bootblock
X
X	move.l	window2,a0
X	bsr	waitforclose		; Wait for closegadget
X
X	move.l	IntuitionBase,a6
X	move.l	window2,a0
X	jsr	_LVOCloseWindow(a6)
X	clr.l	d0			; No WATCH Gadget
X	rts
X
X;====================================
X;= Routine for installing your disk =
X;====================================
X
Xinstalldisk:
X	move.w	#300,hsize
X	move.w	#50,hsize+2		; Adjust height
X	lea.l	InstallTitle,a0
X	move.l	a0,title2
X	move.l	IntuitionBase,a6
X	move.l	#NewWindowStructure2,a0
X	jsr	_LVOOpenWindow(a6)
X	move.l	d0,window2
X	move.l	d0,a0
X	move.l	wd_RPort(a0),rp2
X
X	move.l	$4,a6
X	move.l	#1024,d0
X	move.l	#2+1<<16,d1		; Cleared Chip memory needed
X	jsr	_LVOAllocMem(a6)	; Allocate buffer for bootblock
X	move.l	d0,buffer
X	beq	skip_install		; Prevent a guru
X	
X	lea.l	bootcode,a0
X	move.l	d0,a1
X	move.l	#bootendcode-bootcode-1,d1
X1$	move.b	(a0)+,(a1)+		; Copy bootblock into buffer
X	dbra	d1,1$			
X	move.l	#StandardBootBlock,a0
X	move.l	#Standardend-StandardBootBlock-1,d1
X2$	move.b	(a0)+,(a1)+
X	dbra	d1,2$
X
X	bsr	sum
X	bsr	writebuffer
X
X	move.l	buffer,a1
X	move.l	#1024,d0
X	move.l	$4,a6
X	jsr	_LVOFreeMem(a6)		; Free buffer for bootblock
X
X	tst.b	io_error
X	bne.s	3$			; An error has occured
X	move.l	#install_message,Mt5
X	move.l	#install_message,Mt6
X	bra.s	install_m
X3$	move.b	io_error,d0
X	cmp.b	#28,d0			; disk protected???
X	bne	4$
X	move.l	#disk_protected,Mt5
X	move.l	#disk_protected,Mt6
X	bra	install_m
X4$	cmp.b	#29,d0			; disk changed ????
X	bne	5$
X	move.l	#disk_changed,Mt5
X	move.l	#disk_changed,Mt6
X	bra	install_m
X5$	move.l	#install_fail,Mt5	; Unknown failure
X	move.l	#install_fail,Mt6
Xinstall_m
X	move.l	rp2,a0
X	clr.l	d0
X	clr.l	d1
X	move.l	#MyTekst5,a1
X	move.l	IntuitionBase,a6
X	jsr	_LVOPrintIText(a6)
X	
X
X	move.l	window2,a0
X	bsr	waitforclose		; Wait for closegadget
X
Xskip_install:
X	move.l	IntuitionBase,a6
X	move.l	window2,a0
X	jsr	_LVOCloseWindow(a6)
X	clr.l	d0			; No WATCH Gadget
X	rts
X
X;=============================================
X;= Routine for displaying a part of ExecBase =
X;=============================================
X
X
Xviewmemory:
X	move.w	#318,hsize
X	move.w	#100,hsize+2		; Adjust height
X	lea.l	ViewTitle,a0
X	move.l	a0,title2
X	move.l	IntuitionBase,a6
X	move.l	#NewWindowStructure2,a0
X	jsr	_LVOOpenWindow(a6)
X	move.l	d0,window2
X	move.l	d0,a0
X	move.l	wd_RPort(a0),rp2
X
X	move.l	$4,a6
X	move.l	#5*80,d0
X	move.l	#1<<16,d1			
X	jsr	_LVOAllocMem(a6)	; Allocate buffer
X	move.l	d0,buffer
X	move.l	d0,-(a7)
X
X	move.l	d0,MTE8
X	move.l	d0,MTE8b
X	add.l	#80,d0
X	move.l	d0,MTE9
X	move.l	d0,MTE9b
X	add.l	#80,d0
X	move.l	d0,MTE10
X	move.l	d0,MTE10b
X	add.l	#80,d0
X	move.l	d0,MTE11
X	move.l	d0,MTE11b
X	add.l	#80,d0
X	move.l	d0,MTE12
X	move.l	d0,MTE12b
X
X
X
X;======== ColdCapture ==============
X
X	lea.l	coldcapture,a0
X	move.l	buffer,a1
X	bsr	stringcopy
X	
X	move.l	$4,a6
X	move.l	42(a6),a0
X	bsr	makestring
X
X
X;======= CoolCapture =============
X
X	add.l	#80,buffer	
X	lea.l	coolcapture,a0
X	move.l	buffer,a1
X	bsr	stringcopy
X	
X	move.l	$4,a6
X	move.l	46(a6),a0
X	bsr	makestring
X
X
X;======== KickMemPtr ===============
X
X	add.l	#80,buffer
X	lea.l	kickmemptr,a0
X	move.l	buffer,a1
X	bsr	stringcopy
X	
X	move.l	$4,a6
X	move.l	546(a6),a0
X	bsr	makestring
X
X
X;========== KickTagPtr ================
X
X	add.l	#80,buffer
X	lea.l	kicktagptr,a0
X	move.l	buffer,a1
X	bsr	stringcopy
X	
X	move.l	$4,a6
X	move.l	550(a6),a0
X	bsr	makestring
X
X;==== DoIO =========================
X
X	add.l	#80,buffer
X	lea.l	doio_vector,a0
X	move.l	buffer,a1
X	bsr	stringcopy
X	
X	move.l	$4,a6
X	move.l	-454(a6),a0
X	bsr	makestring
X
X;===== Rad ============================
X
X	move.l	$4,a6
X	lea.l	TaskName,a1
X	jsr	_LVOFindTask(a6)
X	tst.l	d0
X	beq.s	no_rad			; No rad
X	move.l	#found_rad,MTE13
X	move.l	#found_rad,MTE13b
X	bra.s	rad_cont
Xno_rad	move.l	#no_found_rad,MTE13
X	move.l	#no_found_rad,MTE13b
Xrad_cont:
X
X	move.l	rp2,a0
X	clr.l	d0
X	clr.l	d1
X	move.l	#IText8,a1
X	move.l	IntuitionBase,a6
X	jsr	_LVOPrintIText(a6)
X	
X	move.l	$4,a6
X	move.l	#5*80,d0
X	move.l	(a7)+,a1			
X	jsr	_LVOFreeMem(a6)		; Free  buffer
X	
X	move.l	window2,a0
X	bsr	waitforclose
X
X	move.l	IntuitionBase,a6
X	move.l	window2,a0
X	jsr	_LVOCloseWindow(a6)
X
X	clr.l	d0			; No WATCH Gadget
X	rts
X
X;==============
X;= Makestring =
X;==============
X
Xmakestring:
X	move.l	$4,a6
X	lea.l	number,a1
X	bsr.s	convert
X
X	lea.l	number,a1
X	move.l	buffer,a0
X	bsr.s	stringadd
X	rts
X
X;========================
X;= Copy string a0 -> a1 =
X;========================
X
Xstringcopy:
X1$	move.b	(a0)+,d0
X	move.b	d0,(a1)+
X	bne.s 	1$
X	rts
X
X;==============================
X;= Add string a1 to string a0 =
X;==============================
X
Xstringadd:
X	move.l	a2,-(a7)
X1$	cmp.b	#0,(a0)+		; Find end of string a0
X	bne.s	1$
X	subq	#1,a0
X	move.l	a0,a2
X	move.l	a1,a0
X	move.l	a2,a1
X	bsr.s	stringcopy		; Paste a1 to a0
X	move.l	(a7)+,a2
X	rts
X
X;==========================================
X;= Convert value in a0 to buffer a1 (Hex) =
X;==========================================
X
Xconvert:
X	movem.l	d2-d3/a2,-(a7)
X	lea.l	convtable,a2
X	move.l	a0,d1
X	moveq	#7,d3
X1$	move.l	d1,d2
X	and.l	#$f,d2
X	move.l	d2,d0
X	move.b	0(a2,d0),-(a7)
X	lsr.l	#4,d1
X	dbra	d3,1$
X	moveq	#7,d3
X2$	move.b	(a7)+,(a1)+
X	dbra	d3,2$
X	movem.l	(a7)+,d2-d3/a2
X	rts
X
X
X
X
X;=========================================
X;= Calculates lenght of string in buffer =
X;= Returns lenght in d0                  =
X;=========================================
X
Xlength:
X	clr.l	d0
X	move.l	a5,-(a7)
X	move.l	buffer,a5
X1$	addq	#1,d0
X	cmp.b	#0,(a5)+
X	bne.s	1$
X	subq	#1,d0
X	move.l	(a7)+,a5
X	rts
X;=======================================
X;= Waits for closegadget to be pressed =
X;=======================================
X
Xwaitforclose:
X	move.l	$4,a6
X	move.l	a5,-(a7)
X	move.l  a0,a5
X1$	move.l	a5,a0
X	move.l	wd_UserPort(a0),a0
X	move.l	a0,-(a7)
X	moveq	#0,d1
X	move.b	mp_SigBit(a0),d1
X	moveq	#1,d0
X	asl.l	d1,d0
X	jsr	_LVOWait(a6)	; Wait for an event
X	move.l	(a7)+,a0	; Get UserPort
X	jsr	_LVOGetMsg(a6)	; Get Message from IDCMP Port
X	move.l	d0,a1
X	move.l	im_Class(a1),d4
X	jsr	_LVOReplyMsg(a6) ; Reply the message
X
X	cmp.l	#CLOSEWINDOW,d4
X	bne.s	1$
X	move.l	(a7)+,a5
X	rts
X
X
X;========================================
X;= Prints current virusstatus in window =
X;========================================
X
Xprintstatus:
X	move.l	window,a0
X	move.l	wd_RPort(a0),a1
X	move.l	a1,rp		; Store RastPort
X
X	moveq	#0,d1
X	move.b	signal,d1
X	beq.s	1$		; No extra message needed (=Clean)
X	cmp.b	#2,d1
X	beq.s	1$		; The same...
X	move.l	#message,Mt3	; System has been modified!
X	move.l	#message,Mt4
X	bra	12$
X
X1$	move.l	rp,a0		; Clear message box
X	clr.	d0
X	clr.l	d1
X	move.l	#MyTekst3a,a1
X	move.l	IntuitionBase,a6
X	jsr	_LVOPrintIText(a6)
X	
X	move.l	#L9,Mt3		; Clear previous(?) message!
X	move.l	#L9,Mt4
X	
X
X12$	move.l	rp,a0
X	clr.	d0
X	clr.l	d1
X	move.l	#MyTekst3,a1
X	move.l	IntuitionBase,a6
X	jsr	_LVOPrintIText(a6)
X	
X	move.b	signal,d1
X	cmp.b	#0,d1
X	bne.s	2$
X	lea.l	L0,a0
X	bra.s	10$
X2$	cmp.b	#1,d1
X	bne.s	3$
X	lea.l	L1,a0
X	bra.s	10$
X3$	cmp.b	#2,d1
X	bne.s	4$
X	lea.l	L2,a0
X	bra.s	10$
X4$	cmp.b	#3,d1
X	bne.s	5$
X	lea.l	L3,a0
X	bra.s	10$
X5$	cmp.b	#4,d1
X	bne.s	6$
X	lea.l	L4,a0
X	bra.s	10$
X6$	cmp.b	#5,d1
X	bne.s	7$
X	lea.l	L5,a0
X	bra.s	10$
X7$	cmp.b	#6,d1
X	bne.s	8$
X	lea.l	L6,a0
X	bra.s	10$
X8$	cmp.b	#7,d1
X	bne.s	9$
X	lea.l	L7,a0
X	bra.s	10$
X9$	cmp.b	#8,d1
X	bne.s	11$
X	lea.l	L8,a0
X10$	move.l	a0,Mt1
X	move.l	a0,Mt2
X	move.l	rp,a0
X	move.l	#MyTekst,a1
X	clr.l	d0
X	clr.l	d1
X	move.l	IntuitionBase,a6
X	jsr	_LVOPrintIText(a6)
X11$	rts
X
X
X;======================================
X;= Prints buffer in ascii on a window =
X;======================================
X
Xprintbuffer:
X	move.l	buffer,a3
X	move.l	a3,a4
X	move.l	#1023,d1
X	clr.l	d0
Xcloop	move.b	(a3)+,d0
X	cmp.b	#31,d0
X	bls.s	outrange
X	cmp.b	#127,d0
X	bhs.s	outrange
X	move.b	d0,(a4)+
X	dbra	d1,cloop
X	bra.s	printit
Xoutrange:
X	move.b	#'.',(a4)+
X	dbra	d1,cloop
Xprintit:
X	move.l	window2,a0
X	move.l	wd_RPort(a0),rp2
X	moveq	#0,d3
X	move.l	buffer,a3
Xploop	move.l	d3,d1
X	mulu	#8,d1
X	add.l	#20,d1
X	move.w	d1,y1
X	subq	#1,d1
X	move.w	d1,y2
X
X	
X	move.l	#dummy,a2
X	move.l	d3,d1
X	mulu	#64,d1
X	move.l	a3,a0
X	add.l	d1,a0
X	moveq	#63,d0
X1$	move.b	(a0)+,(a2)+		; copy string to dummy
X	dbra	d0,1$
X	move.b	#0,(a2)			; end string with 0
X
X	clr.l	d0
X	clr.l	d1
X	move.l	rp2,a0
X	lea.l	IText14,a1
X	move.l	IntuitionBase,a6
X	jsr	_LVOPrintIText(a6)
X
X	addq	#1,d3
X	cmp.l	#15,d3
X	bls.s	ploop
X	rts
X
X;============================
X;= Read bootblock in buffer =
X;============================
X
Xreadbootblock:
X	move.w	#READ,commando
X	bsr.s	bootio
X	rts
X
X;=============================
X;= Write buffer to bootblock =
X;=============================
X
Xwritebuffer:
X	move.w	#WRITE,commando
X	bsr.s	bootio
X	rts
X
X
X;==========================================
X;= Multi function boot read/write routine =
X;=					  =
X;= io_error contains error on exit		  =
X;=					  =
X;==========================================
X
Xbootio:
X	move.l	$4,a6
X	
X	sub.l	a1,a1
X	jsr	_LVOFindTask(a6)
X	move.l	d0,readreply+$10
X	lea.l	readreply,a1
X	jsr	_LVOAddPort(a6)
X	lea.l	diskio,a1
X	moveq	#0,d0
X	move.b	drive,d0
X	clr.l	d1
X	lea.l	devicename,a0
X	jsr	_LVOOpenDevice(a6)
X	tst.l	d0
X	beq.s	tskip
X	lea.l	readreply,a1
X	jsr	_LVORemPort(a6)
X	bra	trackerror
Xtskip	lea.l	diskio,a1
X	move.l	buffer,40(a1)
X	move.l	#readreply,14(a1)
X	move.w	#TD_CHANGESTATE,28(a1)
X	jsr	_LVODoIO(a6)
X	move.l	diskio+32,d6
X	beq.s	tskip2
X	move.b	#29,io_error
X	bra	terror				; No disk!
X
Xtskip2	move.w	commando,d5
X	cmp.w	#READ,d5
X	bne.s	1$				; Don't CMD_CLEAR for a write
X	lea.l	diskio,a1			; We will read a bootblock
X	move.l	buffer,40(a1)
X	move.l	#readreply,14(a1)		; so, force a reading
X	move.w	#5,28(a1)
X	jsr	_LVODoIO(a6)		; CMD_Clear (Clear trackbuffer)
X
X1$	lea.l	diskio,a1
X	move.l	#readreply,14(a1)
X	move.w	commando,28(a1)
X	move.l	buffer,40(a1)
X	move.l	#1024,36(a1)
X	move.l	#0,44(a1)
X	move.l	$4,a6
X	jsr	_LVODoIO(a6)
X	move.b	diskio+31,io_error		; Error number
X
X	move.w	commando,d5
X	cmp.w	#WRITE,d5
X	bne.s	2$
X
X	lea.l	diskio,a1
X	move.l	buffer,40(a1)
X	move.l	#readreply,14(a1)
X	move.w	#4,28(a1)		; CMD_UPDATE
X	move.l	$4,a6
X	jsr	_LVODoIO(a6)		; Write all buffers out
X	move.b	diskio+31,io_error	; Get error number
X
X2$	tst.b	io_error
X	beq.s	tgood
Xterror	lea.l	errormessage,a1
X	move.l	window2,a0
X	move.l	#0,a2
X	move.l	IntuitionBase,a6
X	jsr	_LVOSetWindowTitles(a6)
X	move.l	$4,a6
X	
Xtgood	lea.l	diskio,a1
X	move.w	#9,28(a1)		; TD_MOTOR
X	move.l	#0,36(a1)
X	jsr	_LVODoIO(a6)
X
X	lea.l	readreply,a1
X	jsr	_LVORemPort(a6)
X	lea.l	diskio,a1
X	jsr	_LVOCloseDevice(a6)
X
Xtrackerror:
X	rts
X
X;================================
X;= The maincode of my Bootblock =
X;================================
X
Xbootcode:
X	dc.b	'DOS',0
X	dc.l	0
Xroot	dc.l	880
Xmain	move.l	$4,a6
X	lea.l	Dosname(pc),a1
X	jsr	_LVOFindResident(a6)
X	move.l	d0,a0
X	move.l	22(a0),a0
X	clr.l	d0
X	rts
XDosname	dc.b	'dos.library',0
Xbootendcode:
X
X;=========================================================
X;= Routine which calculates the checksum of my bootblock =
X;=========================================================
X	even
X
Xsum	clr.l	d0
X	move.l	buffer,a0
X	move.l	#255,d1
Xsumloop	add.l	(a0)+,d0
X	bcc.s	sumcont
X	addq	#1,d0
Xsumcont	dbra	d1,sumloop
X	moveq	#-1,d1
X	sub.l	d0,d1
X	move.l	buffer,a2
X	move.l	d1,4(a2)
X	rts
X
X;===============================================
X;= This routine will spawn a new cli using arp =
X;===============================================
X
Xnewcli:
X	move.l	$4,a6
X	lea.l	ArpName,a1
X	clr.l	d0
X	jsr	_LVOOpenLibrary(a6)
X	move.l	d0,ArpBase
X	bne	1$
X	move.l	IntuitionBase,a6	; Arp is not available
X	move.l	#0,a0
X	jsr	_LVODisplayBeep(a6)
X	bra	2$
X1$	move.l	ArpBase,a6
X	lea.l	CONNAME,a0
X	move.l	#0,a1
X	lea.l	newshell,a2
X	jsr	_ASyncRun(a6)
X	move.l	$4,a6
X	move.l	ArpBase,a1
X	jsr	_LVOCloseLibrary(a6)	; Close Arp
X2$	move.b	#0,Flag			; Clear key signal
X	move.b	#0,keyfound
X	clr.l	d0
X	rts	
X
X
Xdo_function_keys:
X	cmp.w	#FUNC_F2,d0
X	bne	1$
X	lea.l	script2,a0
X	bra	cont
X1$	cmp.w	#FUNC_F3,d0
X	bne	2$
X	lea.l	script3,a0
X	bra	cont
X2$	cmp.w	#FUNC_F4,d0
X	bne	3$
X	lea.l	script4,a0
X	bra	cont
X3$	cmp.w	#FUNC_F5,d0
X	bne	4$
X	lea.l	script5,a0
X	bra	cont
X4$	cmp.w	#FUNC_F6,d0
X	bne	5$
X	lea.l	script6,a0
X	bra	cont
X5$	cmp.w	#FUNC_F7,d0
X	bne	6$
X	lea.l	script7,a0
X	bra	cont
X6$	cmp.w	#FUNC_F8,d0
X	bne	7$
X	lea.l	script8,a0
X	bra	cont
X7$	cmp.w	#FUNC_F9,d0
X	bne	8$
X	lea.l	script9,a0
X	bra	cont
X8$	cmp.w	#FUNC_F10,d0
X	bne	ret
X	lea.l	script10,a0
Xcont	move.l	a0,d1
X	clr.l	d2
X	clr.l	d3
X	move.l	DOSBase,a6
X	jsr	_LVOExecute(a6)
X
Xret	move.b	#0,Flag			; Clear key signal
X	move.b	#0,keyfound
X	clr.l	d0
X	rts	
X
X 
X
X;====================================
X;= Help routine: shows credits+help =
X;====================================
X
Xshowhelp:
X	move.w	#418,hsize
X	move.w	#130,hsize+2		; Adjust height
X	move.l	#HelpTitle,title2
X	move.l	IntuitionBase,a6
X	move.l	#NewWindowStructure2,a0
X	jsr	_LVOOpenWindow(a6)
X	move.l	d0,window2
X	move.l	d0,a0
X	move.l	wd_RPort(a0),a0
X	move.l	#Text15,a1
X	clr.l	d0
X	clr.l	d1
X	jsr	_LVOPrintIText(a6)
X
X	move.l	window2,a0
X	bsr	waitforclose
X
X	move.l	IntuitionBase,a6
X	move.l	window2,a0
X	jsr	_LVOCloseWindow(a6)
X
X	clr.l	d0
X	rts
X
X;======================
X;= The reboot routine =
X;======================
X
Xreboot	bsr	yesno2				; Want to reboot???
X	tst.l	d0
X	bne.s	1$				; noop
X	rts
X1$	move.l	$4,a6
X	move.l	#-1,$4
X	cmp.w	#V36_EXEC,LIB_VERSION(a6)
X	blt.s	old_exec
X	jmp	TEMP_ColdReboot(a6)     ;Let Exec do it...
X	;NOTE: Control flow never returns to here
X
X
Xold_exec:	
X	lea.l	GoAway(pc),a5           ;address of code to execute
X	jsr	_LVOSupervisor(a6)      ;trap to code at (a5)...
X	;NOTE: Control flow never returns to here
X
X
X;-------------- MagicResetCode ---------DO NOT CHANGE-----------------------
X
X		CNOP	0,4			;IMPORTANT! Longword align!
XGoAway: 	lea.l	MAGIC_ROMEND,a0 	;(end of ROM)
X		sub.l	MAGIC_SIZEOFFSET(a0),a0 ;(end of ROM)-(ROM size)=PC
X		move.l	4(a0),a0                ;Get Initial Program Counter
X		subq.l	#2,a0			;now points to second RESET
X		reset				;first RESET instruction
X		jmp	(a0)                    ;CPU Prefetch executes this
X		;NOTE: the RESET and JMP instructions must share a longword!
X
X;---------------------------------------DO NOT CHANGE-----------------------
X
X
X
X;=======================
X;= The Cleanup Routine =
X;=======================
X
Xexit	move.l	$4,a6
X	move.l	GfxBase,a1
X	jsr	_LVOCloseLibrary(a6)
Xnographics:
X	move.l	IntuitionBase,a1
X	jsr	_LVOCloseLibrary(a6)
Xnointuition:
X	move.l	DOSBase,a1
X	jsr	_LVOCloseLibrary(a6)
Xnodos	rts
X
X;=========================
X;= The end of the source =
X;=========================	
X
X	end
X
X
X
X
END_OF_FILE
if test 42429 -ne `wc -c <'bigbrother.asm'`; then
    echo shar: \"'bigbrother.asm'\" unpacked with wrong size!
fi
# end of 'bigbrother.asm'
fi
if test -f 'bigbrother.doc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'bigbrother.doc'\"
else
echo shar: Extracting \"'bigbrother.doc'\" \(6053 characters\)
sed "s/^X//" >'bigbrother.doc' <<'END_OF_FILE'
X
XDocumentation for Bigbrother V2.11
X==================================
X
XThis document will describe the working of Bigbrother V2.11 for
Xthe Commodore Amiga computer. Bigbrother and all related programs
Xand documents are presented as is. Although the author has made
Xevery effort to make this product free of bugs, he can not be
Xheld responsible for any damage resulting from the use of this
Xprogram. The program is shareware. It may be copied but may not be
Xused as a part of a commercial package without the prior written
Xpermission of the author. If you like the program and if you are using 
Xit regularly, you may send $10 or more to:
X       
X	Erwin van Breemen
X	Berliozplein 15
X	2651 VG Berkel ZH
X	Holland
X
X	e-mail:	breemen@rulcvx.LeidenUniv.nl
X
X
X
XFeel free to send any bugs,suggestions or comments to the above address.
X
X
XRequirements
X============
X
XBigbrother requires Kickstart 1.2 or higher. For Kickstart 1.2 it is
Xnot necessary to use the preferences file big_prefs. For Kickstart 1.3
Xor higher this file must be placed in the s: directory. It must contain 
Xthe DOIO vector pointing to the routine in the rom. Some features make
Xuse of arp.library. This library must be placed in the libs: directory
XNote that the arp.library (V39+) has not been included and can be
Xobtained on almost any BBS board. 
XThe scriptfiles included use some general script commands. See for
Xexplanation any AmigaDos manual.
X 
X
XWhat does Bigbrother?
X=====================
X
XBigbrother is a virus infection detection program with some optional
Xutilities. It is running as a normal task and checks every 1 second
Xthe important memory locations in the Amiga. Depending on the values
Xand the their combinations, an expert system will accept it or warn
Xyou in case it thinks it is dangerous. This means that no program
Xcan start a virus in memory without alerting Bigbrother. 
XAs a bonus, Bigbrother is capable of starting a new shell, starting
Xscript files, viewing and installing bootblocks. All this in a 
Xprogram less than 10K. 
X
X
XInstallation
X============
X
XBigbrother is very easy to install. Bigbrother will detach itself
Xfrom the current shell or cli. Just put Bigbrother in the c:
Xdirectory and add the following line to your startup-sequence:
X
Xbigbrother
X
XPlace arp.library in the libs: directory.
XPut big_prefs and bighelp in your s: directory. This is all there is.
X
X
XAdditional notes.
X=================
X
XFor Kickstart 1.2 users
X
XYou must not(!) place the big_prefs in the s: directory. This file contains
Xthe DOIO vector ( needed for a virus extermination) of Kickstart 1.3. 
XBigbrother is standard configured for Kickstart 1.2. If Bigbrother finds
Xs:big_prefs then it will use it for the Clear option. For 1.2 users
Xthis means a guru.
X
XFor Kickstart 1.3 or higher users
X
XNow it is essential to have a s:big_prefs file. Otherwise Bigbrother
Xwill use the default 1.2 value of DOIO. You can use the Memory option
Xto discover it's value. Use newzap or something to alter s:big_prefs
XNote that Bigbrother will come to front if the DOIO is wrong for your 
Xmachine. This is also a method to discover the value of DOIO in your
Xmachine. The supplied big_prefs contains the value for Kickstart 1.3
X
X
X
XHow to operate Bigbrother
X=========================
X
XYou can bring Bigbrother to the front by pressing Crtl-Help. Bigbrother
Xwill open a window on the workbench. The same thing happens automaticly
Xif a virus has been detected.
XYou will see a window containing several gadgets and a message box.
XIn the message box a text will describe the current status of your
XAmiga concerning viri. Below there is a description of all gadgets:
X
X
X DF0:
X
XThis gadget will select between the diskdrives available at the moment.
XIf you have for example 2 drives, the gadget toggles between df0: and
Xdf1:. The drive selected will be used for the View and Install option.
X
X Watch
X
XWhen you press this gadget Bigbrother will close its window and return
Xto the sleeping mode. In the sleeping mode, Bigbrother checks every
Xsecond for a virus in memory and whether there has been pressed on an 
Xinteresting F-key.
X
X Newshell
X
XBigbrother will create a new shell process as you press this gadget.
XThe same can also be done by pressing Crtl-F1 in the sleeping mode.
X
X View
X
XThis option allows you to examine the bootblock of disk in the selected
Xdrive.
X
X Memory
X
XHere you can examine the actual contents of the important vectors. For
Xa clean machine, all vector should point to the Kickstart rom. This means
Xthat the addresses must point to $fc0000 or higher.
X
X
X Install
X
XIn this option you can install a bootblock on the disk in the slected
Xdiskdrive. This bootblock contains the normal bootcode plus a piece
Xof text in order to recognize it as a Bigbrother bootblock. Some viri
Xwill return a normal installed bootblock. So it is safer to use the
XBigbrother bootblock. In this way you are sure you have read a real
Xbootblock and a faked one!
X
X Clear
X
XBy pressing this option you will clear all the important vector to
Xtheir standard values. This is where big_prefs comes in. If big_prefs
Xdoesn't contain the rigth value for your Kickstart, you Amiga will hang
Xin less than a second. Note that you will lose all your resident programs
Xincluding RAD etc.
X
X
X Reboot
X
XThis option will reboot your Amiga in the official way. No viri can
Xsurvive this reset because all system structures will be recreated. 
X
X
X Help
X
XThis option will reveal my address. If you use Bigbrother, then please
Xsend $10 to that address. Many thanks in advance.
X
X
XScriptfiles
X===========
X
XBigbrother is also capable of starting scriptfiles named F2...F10 by
Xpressing , as you can guess, F2..F10. Some examples of scriptfiles
Xhave been included. The only limitation is that you can not get 
Xinput from a user (i.e. ask). This means that in practice you can
Xuse these script files to start applications like an editor.
X
X
X
XI hope this program will help you in the fight against viri.
X
X
X	Erwin van Breemen (The Orega Programming Group Holland)
X	Berliozplein 15
X	2651 VG Berkel ZH
X	Holland
X
X	e-mail:	breemen@rulcvx.LeidenUniv.nl
X
X
X
END_OF_FILE
if test 6053 -ne `wc -c <'bigbrother.doc'`; then
    echo shar: \"'bigbrother.doc'\" unpacked with wrong size!
fi
# end of 'bigbrother.doc'
fi
if test -f 'bigbrother.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'bigbrother.uu'\"
else
echo shar: Extracting \"'bigbrother.uu'\" \(14686 characters\)
sed "s/^X//" >'bigbrother.uu' <<'END_OF_FILE'
Xbegin 644 bigbrother
XM```#\P`````````&``````````4````U```#Y@```%<```0E``````````$`@
XM``/I````-2QY````!)/)3J[^VBA`2JP`K&8,0>P`7$ZN_H!.KOZ,+'D````$H
XM0_D```V,0H!.KOW8*D!G``"<+$U.KO_$(@`D/``````F/````%!.KO_0(CP`J
XM``YN)#P```/N3J[_XB/````/@"/````/A"QY````!$/Y```-O$*`3J[]V"/`V
XM````#&8```9@```\+'D````,('P`````(GP`````1?D```]V3J[]WBQY````^
XM!")Y````#$ZN_F)!^0`````A?`````#__"QY````!")-3J[^8DYU```#[```_
XM``$`````````N@````<````!````*````$(```!2````8@```&@```!T````]
XMH`````,````"````@````(X```"P`````````_(```/J```#YD)I9T)R;W1H_
XM97(@5C(N,3$@J3$Y.3`@8GD@14$@=F%N($)R965M96X*#51H92!/<F5G82!0%
XM<F]G<F%M;6EN9R!'<F]U<"!(;VQL86YD+@H-````/@`>`4H`?@`!```"0``"Q
XM$`X```'F`````````+(````````````%``7_____``$``````B8`E@`!```"_
XM```"$`@``````````````-`````````````%``7_____``%":6<@0G)O=&AE'
XM<B!6,BXQ,0`@J3$Y.#DO,3DY,`!";V]T0FQO8VLZ``!#;VYT96YT<R!O9B!%Q
XM>&5C0F%S93H`26YS=&%L;&EN9R!";V]T0FQO8VL``$AE;'```$1I<VL@:&%S9
XM(&)E96X@:6YS=&%L;&5D`$EN<W1A;&P@:&%S(&9A:6QE9```1&ES:R!I<R!WP
XM<FET92UP<F]T96-T960A``!$:7-K(&AA<R!B965N(')E;6]V960A``!3=&%NV
XM9&%R9"!";V]T0FQO8VL@8GD@5&AE($]R96=A(%!R;V=R86UM:6YG($=R;W5P4
XM($AO;&QA;F0N($-O<'ER:6=H="`Q.3@Y+#$Y.3`N($EN<W1A;&QE9"!B>2!"N
XM:6<@0G)O=&AE<B!6,BXQ,7,Z8FEG7W!R969S`````XH`'0`6`%``#P`#``$`_
XM`0```A(````````#0@````````````4```````````(``04```(R```"(O__]
XM__\!```%```",@```````````%````!0``\````/```````>`&`"``$%```"^
XM9@```E8`'`!?`0``!0```F8```````````$;```!&P`:````&@`````"``$`6
XM`"T`;@`````````````"C@$`````+`!M`````````````````@`!```M`&0`9
XM`````````````K8!`````"P`8P````````````````(``0``+0!D````````<
XM"Y4```+>`0`!```L`&,````````+E0```O("``$``"T`;@````````N5```#F
XM!@$``0``+`!M````````"Y4``````@`!```H`!D``````````````RX!````W
XM`"<`&`````````````````(``0``%0`#`````````X0```-6`@`!```6``0`7
XM```````#?@```VH!`````!4``P````````-^`````$1&,#H``"`@("``````\
XM`^8`@``N`%``#P````$``0```A(````````#M@````````````$``````@`!)
XM```/``0````````#W@```\H!``````X``P````````/>`````$UE;6]R>0``M
XM```$0@#E`!8`4``/`````0`!```"$@````````02````````````!``````"2
XM``$```T`!`````````0Z```$)@$`````#``#````````!#H`````26YS=&%LS
XM;`````2<`!T`+@!0``\````!``$```(2````````!&X````````````&````$
XM``(``0``%@`$````````!)8```2"`0`````5``,````````$E@````!7871C_
XM:`````3V`.4`+@!0``\````!``$```(2````````!,@````````````#````Y
XM``(``0``%@`$````````!/````3<`0`````5``,````````$\`````!#;&5AS
XM<@````50`(``%@!0``\````!``$```(2````````!2(````````````"````[
XM``(``0``%@`$````````!4H```4V`0`````5``,````````%2@````!6:65WJ
XM``````6N`!T`1@!0``\````!``$```(2````````!7P````````````'````3
XM``(``0``"@`$````````!:0```60`0`````)``,````````%I`````!.97=3"
XM:&5L;``````&"`#E`$8`4``/`````0`!```"$@````````7:````````````R
XM"``````"``$``!<`!`````````8"```%[@$`````%@`#````````!@(`````#
XM2&5L<`````````"``$8`4``/`````0`!```"$@````````8T````````````^
XM"0`````"``$```\`!`````````9<```&2`$`````#@`#````````!EP`````#
XM4F5";V]T```"``$```L`&@`````````````&>`$`````"@`9````````````5
XM``:,`@`!```+`"0`````````````!J`!``````H`(P`````````````&M`(`4
XM`0``"P`N``````````````;(`0`````*`"T`````````````!MP"``$```L`P
XM.``````````````&\`$`````"@`W``````````````<$`@`!```+`$(`````+
XM````````!Q@!``````H`00`````````````'+`(``0``"P!1````````````]
XM``=``0`````*`%`````````````````"``$```H```````````$2```':`$`R
XM````"0```````````1(``````@`!```+`!4````````'I```!Y`!``````H`,
XM%`````````>D```'TE1H:7,@<')O9W)A;2!I<R!P<F]G<F%M;65D(&)Y($5!S
XM('9A;B!"<F5E;65N```"``$```L`'P````````?Z```'Y@$`````"@`>````'
XM````!_H```@L0V]P>7)I9VAT(&)Y(%1H92!/<F5G82!0<F]G<F%M;6EN9R!'"
XM<F]U<"!(;VQL86YD```"``$```L`*0````````A4```(0`$`````"@`H````V
XM````"%0```B$J3$Y.#DL,3DY,"X@06YY(&-O;6UE<F-I86QL>2!B87-E9"!RS
XM97!R;V1U8VEN9P```@`!```+`#,````````(K```")@!``````H`,@``````"
XM``BL```(X&)Y(&%N>2!M96%N<R!O9B!T:&ES('-H87)E=V%R92!P<F]D=6-TC
XM(&ES(&EL;&5G86PN```"``$```L`/0````````D(```(]`$`````"@`\````#
XM````"0@```DZ268@>6]U(&9I;F0@=&AI<R!P<F]G<F%M('5S969U;&P@<&QER
XM87-E('-E;F0@)#$P```"``$```L`1P````````EB```)3@$`````"@!&````0
XM````"6(```F0=&\Z($5!('9A;B!"<F5E;65N+"!"97)L:6]Z<&QE:6X@,34LW
XM(#(V-3$@5D<```(``0``"P!1````````";@```FD`0`````*`%`````````)<
XMN```"=A"97)K96P@96X@4F]D96YR:6IS+"`@2&]L;&%N9"X```(``0``"P!E`
XM````````"@````GL`0`````*`&0````````*````"B)(96QP.B`@($-T<FPM)
XM1C$@("`N+BXN+B!.97=3:&5L;````@`!```+`&\````````*2@``"C8!````1
XM``H`;@````````I*`````"`@("`@("`@0W1R;"U(14Q0("XN+BXN($)I9T)RC
XM;W1H97(````!`@(#!`4&`P0'!P,$!P<("``!"`@%!0@(!P<("`<',#$R,S0UY
XM-C<X.6%B8V1E9@``5&AI<R!S>7-T96T@:&%S(&)E96X@;6]D:69I960N`$UEG
XM;6]R>2!I<R!C;&5A;BX`4V-A('9I<G5S+@!5;FMN;W=N('9I<G5S(&]R(&YOY
XM="!M;W5N=&5D(')A9"X`3F]N(')E<V5T('9I<G5S+@!38V$@;&EK92!V:7)U,
XM<RX`1&%S82!V:7)U<RX`1&%S82!L:6ME('9I<G5S+@!">71E0F%N9&ET(&]R-
XM($QA;65R('9I<G5S+@!5;FMN;W=N('-Y<W1E;2!C;VYF:6=U<F%T:6]N/S\_B
XM`%-Y<W1E;2!H87,@;F]T(&)E96X@;6]D:69I960N(``@("`@("`@("`@("`@;
XM("`@("`@("`@("`@("`@("`@("```%)!1`!T<F%C:V1I<VLN9&5V:6-E``!"W
XM:6="<F]T:&5R(%!O<G0`0F]O=$)L;V-K(%)E860O5W)I=&4@17)R;W(N`%)A+
XM9%1A<VL@:&%S(&)E96X@9F]U;F0N`%)A9%1A<VL@:&%S(&YO="!B965N(&9O=
XM=6YD+@!,875N8VAE9"!B>2!":6="<F]T:&5R(%8R+C$Q"@``J@\A("$@(2`A[
XM("$@(%<@02!2($X@22!.($<@(2`A("$@(2`A(``!`+`;07)E('EO=2!S=7)E\
XM('1O(&-L96%R('1H92!M96UO<GD_``$`"B=0<F5S<R`\3$5&5"!-3U5312!"4
XM55143TX^(&9O<B!/2R`@+2TM+2`@4')E<W,@/%))1TA4($U/55-%($)55%1/K
XM3CX@9F]R($-!3D-%3````*H/(2`A("$@(2`A("!7($$@4B!.($D@3B!'("$@.
XM(2`A("$@(2```0"P&T%R92!Y;W4@<W5R92!Y;W4@=V%N="!T;R!296)O;W0_H
XM(``!``HG4')E<W,@/$Q%1E0@34]54T4@0E545$]./B!F;W(@3TL@("TM+2T@^
XM(%!R97-S(#Q224=(5"!-3U5312!"55143TX^(&9O<B!#04Y#14P``&1O<RYLW
XM:6)R87)Y`&EN='5I=&EO;BYL:6)R87)Y`&=R87!H:6-S+FQI8G)A<GD``&%R6
XM<"YL:6)R87)Y`$-O;&1#87!T=7)E("T@3V9F<V5T("`@-#(@.B0`0V]O;$-AR
XM<'1U<F4@+2!/9F9S970@("`T-B`Z)`!+:6-K365M4'1R("`M($]F9G-E="`@7
XM-30V(#HD`$MI8VM486=0='(@("T@3V9F<V5T("`U-3`@.B0`1&])3R!696-TZ
XM;W(@+2!/9F9S970@+30U-"`Z)``P,#`P,#`P,`!":6="<F]T:&5R``!.24PZB
XM``!%>&5C=71E(',Z1C(`17AE8W5T92!S.D8S`$5X96-U=&4@<SI&-`!%>&5C0
XM=71E(',Z1C4`17AE8W5T92!S.D8V`$5X96-U=&4@<SI&-P!%>&5C=71E(',ZO
XM1C@`17AE8W5T92!S.D8Y`$5X96-U=&4@<SI&,3``:6YP=70N9&5V:6-E``!$V
XM1C`Z1$8Q.D1&,CI$1C,Z("`@($1O24\@=F5C=&]R.@#\!MP```^@`(@```PN9
XM`````````````````````````````````````$-/3CHP+S`O-C,Y+S<U+U1H`
XM92!/<F5G82!0<F]G<F%M;6EN9R!'<F]U<"!(;VQL86YD``````^@`!``````D
XM``````````````]"```````````````````#[````'L````!````9````&P`,
XM``"<```!Y@```?@```(````"&@```AX```(J```"3@```E(```)>```"B@``V
XM`K(```+6```"V@```NH```+N```"_@```P(```,2```#*@```TX```-2```#T
XM8@```V8```-V```#B@```YP```.D```#P@```\8```/6```#Y@```_@```0`F
XM```$'@``!"(```0R```$0@``!%0```1<```$>@``!'X```2.```$G```!*X`@
XM``2V```$U```!-@```3H```$]@``!0@```40```%+@``!3(```5"```%4```\
XM!6(```5J```%B```!8P```6<```%K@``!<````7(```%Y@``!>H```7Z```&Y
XM&@``!B(```9````&1```!E0```9T```&B```!IP```:P```&Q```!M@```;LF
XM```'````!Q0```<H```'/```!V0```>(```'C```!YP```>@```'W@``!^(`Y
XM``?R```']@``"#@```@\```(3```"%````B0```(E```"*0```BH```([```J
XM"/````D````)!```"48```E*```)6@``"5X```F<```)H```";````FT```)'
XMY```">@```GX```)_```"BX```HR```*0@``#R(```^(`````@````(```=@.
XM```'=`````$````#```/C`````````/R```#ZP```%<```/R```#Z0``!"4L*
XM>0````1#^0``#8Q"@$ZN_=@CP`````!G`!!V80``.BQY````!$*`0_D```V8<
XM3J[]V"/`````"&<`$$Q"@$/Y```-JDZN_=@CP`````1G`!`L85Y@``$L+'D``
XM````(CP```':)#S____^3J[_K"/`````IF<``#HB/````=HD/````^U.KO_B+
XM(\````"B(@`D/```#QAV!$ZN_]8B.0```*).KO_<(CD```"F3J[_IDYU$_P`!
XM`````"D3_```````*A/\```````K+'D````$</].KOZV0?D```#:$4``#Q%\E
XM````"1%\``0`""%\```+S@`*$7P````.D\E.KO[:)D`G?/____\`N$'Y````D
XMVB%``!`B2$ZN_IY!^0```*H1?``%``@Q?``P`!)#^0```-HA20`.0_D```#\`
XM(WP```)0`!(3?`!_``DC?```````#D/Y````JD'Y```.ZD*`0H%.KOY$0?D`<
XM``"J,7P`"0`<(7P```#\`"@B2$ZN_CA.=6$``=9A#BQY`````'(R3J[_.F#L-
XM('D````$+$A"@DJH`"IG!@""`````4JH`"YG!@""`````4JH`B)G!@""````V
XM`DJH`B9G!@""`````D'H`5Y#^0``"[PL>0````1.KO[L($`B*/_DLKP`_```>
XM9`8`@@````@@>0````0B*/XZLKD```\89P8`@@````1#^0``"[A.KO[:2H!G<
XM!@""````$`*"````'R/"````GG``0?D```IN$#`@`+`\``!G#+`\``)G!A/`-
XM````*4YU#"@``0`$9P0@"$YU,"@`"`)```AG\@QH`%\`!F8,,_P`7P```"1@;
XM``#(#&@`4``&9@PS_`!0````)&```+0,:`!1``9F##/\`%$````D8```H`QH0
XM`%(`!F8,,_P`4@```"1@``",#&@`4P`&9@PS_`!3````)&```'@,:`!4``9F,
XM##/\`%0````D8```9`QH`%4`!F8,,_P`50```"1@``!0#&@`5@`&9@PS_`!67
XM````)&```#P,:`!7``9F##/\`%<````D8```*`QH`%@`!F8,,_P`6````"1@$
XM```4#&@`60`&9@#_(C/\`%D````D$_P``0```"H@4+'\`````&<$8`#^_$*`X
XM3G5"@!`Y````*6<(L#P``F<"8"(0.0```"IG&#`Y````)+!\`%!G``L6L'P`N
XM7V<&8``+?$YU+'D````(3J[^JB!\````4DZN_S0CP````!`@0"/H`#(````8,
XM('D````8(GP```)&<`!R`$ZN_Y1A``<6('D````0(&@`5B/(```!6'(`$B@`]
XM#W`!XZ`L>0````1.KO["+'D````$('D```%83J[^C$J`9P#_R")`*"D`%"HI;
XM`!@D:0`<3J[^AKB\```"`&<0N+P```!`9LAA*+!\``9FP"QY````""!Y````W
XM$$ZN_[@3_```````*A/\```````I3G4P*@`FL'P`!F8"3G6P?``%9SRP?``#7
XM9P``PK!\``)G``&$L'P`!&<``F*P?``!9P`#JK!\``=G``H.L'P`"&<`"SBP_
XM?``)9P`+DD*`3G40.0```"M20+`\``1F`G``L#P``&8*(_D```[X```#?K`\'
XM``%F"B/Y```._````WZP/``"9@HC^0``#P````-^L#P``V8*(_D```\$```#S
XM?A/`````*R(\```#?BQY`````$ZN_U)*@&8"8)0@?````>8B>0```!`D?```!
XM```L>0````A.KO\B0H!.=6$``(Q*@&<``((L>0````1.KO^(0_D```NX3J[^4
XMVDJ`9P8B0$ZN_N`L>0````1"K@`J0JX`+D*N`B)"K@(F0JX"*BUY```/&/XZ[
XM0H%![@`B,#P`%M)84<C__$9!/4$`4DZN_X(L>0````@@?`````!.KO^@+'D`Q
XM```$$_P``````"EA`/OH80`%+$*`3G4L>0````@@/``````@?```#$PB/```R
XM`#).KO^F3G4L>0````@@/``````@?```#.PB/````#).KO^F3G4S_`(6````N
XMAC/\`)8```"(0?D```#0(\@```"<+'D````(('P```""3J[_-"/`````%"!`U
XM(^@`,@```!PL>0````0@/```!`!R`DZN_SHCP````"!A``9>$#D````LL#P`T
XM'68``$H@>0```!0@//___Q8B//___YPL>0````A.KO[@(_P```%4```#)B/\C
XM```!5````SH@>0```!Q"@$*!(GP```,:3J[_*&````9A``5D(GD````@(#P`Q
XM``0`+'D````$3J[_+B!Y````%&$``]XL>0````@@>0```!1.KO^X0H!.=3/\&
XM`2P```"&,_P`,@```(A!^0```/(CR````)PL>0````@@?````().KO\T(\``L
XM```4($`CZ``R````'"QY````!"`\```$`"(\``$``DZN_SHCP````"!G``#BX
XM0?D```X^(D`B/````"\2V%')__P@?````6PB/````&T2V%')__QA``<080`%E
XM4B)Y````("`\```$`"QY````!$ZN_RY*.0```"QF%B/\```!#@```R8C_```@
XM`0X```,Z8%H0.0```"RP/``<9@``&B/\```!.@```R8C_````3H```,Z8```]
XM-K`\`!UF```:(_P```%4```#)B/\```!5````SI@```6(_P```$F```#)B/\1
XM```!)@```SH@>0```!Q"@$*!(GP```,:+'D````(3J[_*"!Y````%&$``HXLS
XM>0````@@>0```!1.KO^X0H!.=3/\`3X```"&,_P`9````(A!^0```-PCR```V
XM`)PL>0````@@?````().KO\T(\`````4($`CZ``R````'"QY````!"`\```!,
XMD"(\``$``$ZN_SHCP````"`O`"/````&<"/````&A`:`````4"/````&F"/`6
XM```&K`:`````4"/````&P"/````&U`:`````4"/````&Z"/````&_`:``````
XM4"/````'$"/````')$'Y```-R")Y````(&$``58L>0````0@;@`J80`!*@:Y&
XM````4````"!!^0``#>4B>0```"!A``$N+'D````$(&X`+F$``0(&N0```%``_
XM```@0?D```X"(GD````@80`!!BQY````!"!N`B)A``#:!KD```!0````($'Y,
XM```.'R)Y````(&$``-XL>0````0@;@(F80``L@:Y````4````"!!^0``#CPBN
XM>0```"!A``"V+'D````$(&[^.F$``(HL>0````1#^0``"[A.KO[:2H!G%B/\L
XM```+^@``!S@C_```"_H```=,8!0C_```#!(```<X(_P```P2```'3"!Y````4
XM'$*`0H$B?```!F0L>0````A.KO\H+'D````$(#P```&0(E].KO\N('D````4F
XM80``FBQY````""!Y````%$ZN_[A"@$YU+'D````$0_D```Y982Y#^0``#ED@K
XM>0```"!A"DYU$!@2P&;Z3G4O"@P8``!F^E-()$@@22)*8>8D7TYU2.<P($7Y'
XM```*CB((=@<D`0*"````#R`"'S(``.B)4<O_[G8'$M]1R__\3-\$#$YU0H`O8
XM#2IY````(%)`#!T``&;X4T`J7TYU+'D````$+PTJ2"!-(&@`5B\(<@`2*``/<
XM<`'CH$ZN_L(@7TZN_HPB0"@I`!1.KOZ&N+P```(`9M(J7TYU('D````0(F@`I
XM,B/)````&'(`$CD````I9QZR/``"9Q@C_```"J````*N(_P```J@```"PF``V
XM`#`@>0```!A"0$*!(GP```+*+'D````(3J[_*"/\```+=@```JXC_```"W8`0
XM``+"('D````80D!"@2)\```"HBQY````"$ZN_R@2.0```"FR/```9@A!^0``6
XM"K]@;K(\``%F"$'Y```*T&!@LCP``F8(0?D```K;8%*R/``#9@A!^0``"OU@W
XM1+(\``1F"$'Y```+#F`VLCP`!68(0?D```L>8"BR/``&9@A!^0``"RI@&K(\2
XM``=F"$'Y```+.V`,LCP`"&8L0?D```M6(\@```*&(\@```*:('D````8(GP`-
XM``)Z0H!"@2QY````"$ZN_RA.=29Y````("A+(CP```/_0H`0&[`\`!]C#K`\[
XM`']D"!C`4<G_[F`(&/P`+E')_^0@>0```!0CZ``R````''8`)GD````@(@/"3
XM_``(!H$````4,\$```=:4T$SP0``!VXD?````1(B`\+\`$`@2]'!<#\4V%'(X
XM__P4O```0H!"@2!Y````'$/Y```'5"QY````"$ZN_RA20[:\````#V.F3G4S!
XM_``"````)F$.3G4S_``#````)F$"3G4L>0````23R4ZN_MHCP````(Y#^0``:
XM`'Y.KOZ>0_D````N<``0.0```"M"@4'Y```+O$ZN_D1*@&<.0_D```!^3J[^9
XMF&```39#^0```"XC>0```"``*"-\````?@`.,WP`#@`<3J[^."PY````3F<,9
XM$_P`'0```"Q@``"T.CD````FNGP``F8@0_D````N(WD````@`"@C?````'X`N
XM#C-\``4`'$ZN_CA#^0```"XC?````'X`#C-Y````)@`<(WD````@`"@C?```6
XM!```)"-\```````L+'D````$3J[^.!/Y````30```"PZ.0```":Z?``#9C!#^
XM^0```"XC>0```"``*"-\````?@`.,WP`!``<+'D````$3J[^.!/Y````30``Y
XM`"Q*.0```"QG(D/Y```+WB!Y````%"1\`````"QY````"$ZN_NPL>0````1#5
XM^0```"XS?``)`!PC?```````)$ZN_CA#^0```'Y.KOZ80_D````N3J[^/DYUA
XM1$]3``````````-P+'D````$0_H`$$ZN_Z`@0"!H`!9"@$YU9&]S+FQI8G)AK
XM<GD`0H`@>0```"`B/````/_0F&0"4D!1R?_X<O^2@"1Y````("5!``1.=2QY&
XM````!$/Y```-O$*`3J[]V"/`````#&8``!8L>0````@@?`````!.KO^@8```+
XM+BQY````#$'Y```/0B)\`````$7Y```/'$ZN_=XL>0````0B>0````Q.KOYBT
XM$_P``````"H3_```````)$*`3G6P?`!19@``#$'Y```.=&```(ZP?`!29@``N
XM#$'Y```.@6```'RP?`!39@``#$'Y```.CF```&JP?`!49@``#$'Y```.FV``W
XM`%BP?`!59@``#$'Y```.J&```$:P?`!69@``#$'Y```.M6```#2P?`!79@``/
XM#$'Y```.PF```"*P?`!89@``#$'Y```.SV```!"P?`!99@``&$'Y```.W"((F
XM0H)"@RQY`````$ZN_R(3_```````*A/\```````D0H!.=3/\`:(```"&,_P`#
XM@@```(@C_````0@```"<+'D````(('P```""3J[_-"/`````%"!`(&@`,B)\W
XM```'?$*`0H%.KO\H('D````480#ZCBQY````""!Y````%$ZN_[A"@$YU80#UI
XMJDJ`9@).=2QY````!"/\_____P````0,;@`D`!1M!$[N_2I+^@`&3J[_XD'Y/
XM`0```)'H_^P@:``$58A.<$[0+'D````$(GD````$3J[^8B)Y````"$ZN_F(BO
XM>0````!.KOYB3G4``````^P```"+`````0````@````J````0````&````!Z?
XM````D@```.X```%:```!U@```@0```(2```"-````YH```.Z```$M@``!+H`4
XM``3&```$R@``!-8```3:```$Y@``!.H```3V```%#```!4````5N```%Q@``V
XM!>0```7X```&````!@8```8,```&&```!G@```9\```&@@``!H8```:6```&>
XMW@``!N8```;L```&\@``!OX```=,```'A```!X@```>.```'D@``!Z@```>LU
XM```'L@``![8```?(```'S```!](```?6```'X```!^0```?J```'[@``!_X`+
XM``@N```(-@``"#P```A"```(3@``"(8```B,```(F```")X```BJ```(L```J
XM"+P```C"```(S@``"-0```C:```)`@``"2H```E2```)>@``"9X```FL```)C
XML```";8```FZ```)P@``"<8```G,```)T```">````HF```*+@``"F````L``
XM```+!```"PH```L.```+(@``"S(```LV```+/```"T````M0```+;```"WH`1
XM``N(```+E@``"Z0```NR```+P```"\X```O<```+X@``"^@```OT```,6@``P
XM#&(```R.```,[@``#?````Z>```.S@``#MH```\0```/(@``#S0```]&```/F
XM6```#VH```]\```/C@``#Z````_,```/U```#]H```_>```/Z@``$`````"KP
XM`````@```!0````T````2@```%H```!P````B@```)X```"H````M@```+X`B
XM``#&````V````0P```$<```!+@```3@```%4```!:````70```&*```"+```<
XM`DH```)R```"A@```IH```*N```"P@```M8```+J```"_@```Q(```,F```#=
XM/````T0```->```#;@```W8```.0```#I````ZX```.T```#S````]8```/V1
XM```$,```!#8```1"```$2@``!*````3P```$_```!1(```4>```%D```!:@`6
XM``6Z```%V```!A(```8B```&+```!D0```9.```&7```!FX```:,```&J```"
XM!KX```;(```&S@``!O@```<(```'$@``!RX```=F```'?```!YH```?T```(5
XM!```"`X```@8```('@``"$@```A8```(8@``"'X```C@```(_```"0@```DDJ
XM```),```"4P```E8```)=```"8````G6```)Y@``"@(```H,```*$@``"C0`_
XM``J0```*X```"NH```KR```+&```"R@```M&```+5@``"V````ON```+_@``I
XM#`H```PX```,0```#$@```QH```,B```#)0```RL```,N```#,X```S4```,D
XMW@``#.8```S\```-"@``#1````T8```-*@``#30```T^```-2@``#5````U8-
XM```-:@``#7````UX```-@```#:(```VF```-K```#;@```V^```-Q@``#=X`O
XM``WB```-Z```#?8```X"```.$@``#BH```XT```.<@``#HP```ZJ```.M```E
XM#L@```[J```.]@``#OX```^L```/N```#\````_D```/]```$`X``!`8```0[
XM'@``$'0``!!^```0B`````(````#```!/@``!S@````````#\@```^H`````M
X4```#\@```^D````!</].=0```_(#,
X``
Xend
Xsize 10460
END_OF_FILE
if test 14686 -ne `wc -c <'bigbrother.uu'`; then
    echo shar: \"'bigbrother.uu'\" unpacked with wrong size!
fi
# end of 'bigbrother.uu'
fi
if test -f 'bighelp' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'bighelp'\"
else
echo shar: Extracting \"'bighelp'\" \(787 characters\)
sed "s/^X//" >'bighelp' <<'END_OF_FILE'
Xecho "Function key help BigBrother 2.02"
Xecho "================================="
Xecho "F2 " NOLINE
Xif exists s:F2
Xtype s:F2
Xelse
Xecho "not installed*N"
Xendif
X
Xecho "F3 " NOLINE
Xif exists s:F3
Xtype s:F3
Xelse
Xecho "not installed*N"
Xendif
X
Xecho "F4 " NOLINE
Xif exists s:F4
Xtype s:F4
Xelse
Xecho "not installed*N"
Xendif
X
Xecho "F5 " NOLINE
Xif exists s:F5
Xtype s:F5
Xelse
Xecho "not installed*N"
Xendif
X
Xecho "F6 " NOLINE
Xif exists s:F6
Xtype s:F6
Xelse
Xecho "not installed*N"
Xendif
X
Xecho "F7 " NOLINE
Xif exists s:F7
Xtype s:F7
Xelse
Xecho "not installed*N"
Xendif
X
Xecho "F8 " NOLINE
Xif exists s:F8
Xtype s:F8
Xelse
Xecho "not installed*N"
Xendif
X
Xecho "F9 " NOLINE
Xif exists s:F9
Xtype s:F9
Xelse
Xecho "not installed*N"
Xendif
X
Xecho "F10 " NOLINE
Xif exists s:F10
Xtype s:F10
Xelse
Xecho "not installed*N"
Xendif
X
END_OF_FILE
if test 787 -ne `wc -c <'bighelp'`; then
    echo shar: \"'bighelp'\" unpacked with wrong size!
fi
# end of 'bighelp'
fi
if test -f 'readme' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'readme'\"
else
echo shar: Extracting \"'readme'\" \(426 characters\)
sed "s/^X//" >'readme' <<'END_OF_FILE'
XThis archive should contain:
X
X-----rwe- 90-12-01 18:32:05   21    10460 bigbrother
X-----rwed 90-12-01 18:31:42   84    42429 bigbrother.asm
X-----rwed 90-12-01 18:38:34   12     6053 bigbrother.doc
X-----rwed 90-10-21 15:10:20    2      787 bighelp
X-----rwed 90-10-21 14:20:10    1        6 F2
X-----rwed 90-10-21 14:20:34    1        5 F3
X
Xand of course this readme file.
X
XErwin van Breemen
XThe Orega Programming Group Holland
X
END_OF_FILE
if test 426 -ne `wc -c <'readme'`; then
    echo shar: \"'readme'\" unpacked with wrong size!
fi
# end of 'readme'
fi
echo shar: End of archive 1 \(of 1\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have the archive.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
Mail comments to the moderator at <amiga-request@uunet.uu.net>.
Post requests for sources, and general discussion to comp.sys.amiga.misc.