
*		VIRUSCHECK
*	      von Roger Fischlin  / Mai 1988
*	          Public-Domain-Soft
*	       erstellt mit Devpac Assembler


	incdir ":include/"
	include "intuition/intuition.i"
	include "intuition/intuition_lib.i"
	include "exec/exec_lib.i"

execbase  equ     4	
findtask  equ  -294
addport   equ  -354
remport   equ  -360
openlib   equ  -408
closelib  equ  -414
opendev   equ  -444
closedev  equ  -450
doio      equ  -456


	move.l execbase,a6	 ; Die ersten beiden Blöcke (Boot-Blöcke) in
	sub.l a1,a1       	 ; Diskbuffer (ende des Programmes) laden.
	jsr findtask(a6)	
	move.l d0,readreply+$10

	lea readreply,a1
	jsr addport(a6)

	lea diskio,a1 		; Track-Device öffnen
	move.l #0,d0		; Laufwerk df0:
	clr.l d1
	lea.l trackdevice,a0
	jsr opendev(a6)

	lea.l diskio,a1 	; Tabelle zum Lesen von Disk anlegen
	move.l #readreply,14(a1)
	move.w #2,28(a1)
	move.l #diskbuffer,40(a1)
	move.l #2*512,36(a1)
	move.l #0*512,44(a1)
	move.l execbase,a6
	jsr doio(a6)		; von Diskette lesen

	lea.l diskio,a1	;Floppy-Motor ausschalten
	move #9,28(a1)
	move.l #0,36(a1)
	jsr doio(a6)
	
	lea.l readreply,a1
	jsr remport(a6)

	lea.l diskio,a1	; Trackdisk.Device schließen
	jsr closedev(a6)


	clr.l d4 		; Prüfen, ob auf den Boot-Blöcken der Text
	clr.l d2 		; "trac"(kdisk.device)zu finden ist, den jeder
schleife	lea.l diskbuffer,a0 	; Bootblock-Virus zum weiterkopieren  
	add.l d2,a0 		; benötigt .
	cmp.l #"trac",(a0)
	bne notfound
	bra alert
notfound	addi.l #2,d2
	cmp.l #$3fe,d2
	bne schleife
	clr.l d0
	rts

alert	lea.l intname,a1	;Warnmeldung ausgeben
	clr.l d0
	CALLEXEC OpenLibrary
	move.l d0,_IntuitionBase
	move.l #RECOVERY_ALERT,d0
	lea.l text,a0
	move.l #100,d1
	CALLINT DisplayAlert
	move.l _IntuitionBase,a1
	CALLEXEC CloseLibrary
	clr.l d0
	rts

intname	dc.b "intuition.library",0
	even
_IntuitionBase dc.l 0
text	dc.w 208		; Textstruktur für Alert
	dc.b 50
	dc.b "DANGER - VIRUS on the disk !"
	dc.b 0,0
trackdevice	dc.b "trackdisk.device",0
diskio	ds.l 20
readreply	ds.l 8
diskbuffer	ds.b 512*2
readbuffer	ds.l 1
