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@``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.