[comp.sys.apple] Weishaar's VIRUS.SCAN program

SEWALL@UCONNVM.BITNET (Murph Sewall) (07/30/88)

NEW
100REM This program detects ProDOS 8 SYS files
101REM   that have been infected with the
102REM   viruses known as:
105REM     * CyberAIDS
106REM     * Festering Hate
120REM
121REM If you find an infected program in your
122REM   library, the safest thing to do is to
123REM   delete it and replace it with an
124REM   uninfected back up.
130REM
131REM Written by Tom Weishaar, July 1988
132REM Inspiration by Dennis Doms and Eric Mueller
133REM
900D$=CHR$(4)
910DIMF$(300,1)
1000TEXT:HOME:?CHR$(21)
1001INVERSE
1002?":    APPLE II VIRUS SCANNER: V 1.0    :"
1003NORMAL
1004?
1005?"           COPYRIGHT 1988 BY"
1006?"     TOM WEISHAAR, OPEN-APPLE/GENIE"
1007?
1008?"FOR THE LATEST VERSION OF THIS PROGRAM,"
1009?"CHECK OUT CAT 40 IN GENIE'S A2 LIBRARY."
1010?
1011?"FREEWARE: MAY BE COPIED AND DISTRIBUTED"
1012?" AS LONG AS NO MODIFICATIONS ARE MADE."
1013?
1014?"     PRESS <RETURN> ALONE TO QUIT."
1015?:?:?
1020REM get slot
1021?"SCAN DISK DEVICE IN WHICH SLOT? ";
1022INPUT"";S$:IFS$=""THEN?D$;"BYE"
1023S=VAL(S$):
1024IFS<1ORS>7THEN?CHR$(7):GOTO1020
1040REM get drive
1041?"                IN WHICH DRIVE? ";
1042INPUT"";DR$:IFDR$=""THEN1020
1043D=VAL(DR$):
1044IFD<1ORD>2THEN?CHR$(7):GOTO1040
1100REM start disk scan
1110ONERRGOTO1190
1120?D$;"PREFIX,S";S;",D";D
1121?D$;"PREFIX"
1122INPUTF$:GOSUB4000:F$(0,0)=F$:F$(0,1)="DIR"
1123POKE216,0
1130?:?"CHECKING ";F$(0,0)
1131?"THIS MAY TAKE AWHILE....":?
1140?D$;"BLOAD ";F$(0,0);",TDIR,A$300,B511,L1"
1141IFPEEK(768)=0THEN1150
1142?"CAUTION: VIRUS COUNTER ON THIS DISK=";PEEK(768)
1150REM clear F$(x,x) array
1151FPNT=1
1152IFF$(FPNT,1)=""THENGOTO1154
1153F$(FPNT,1)="":FPNT=FPNT+1:GOTO1152
1154FPNT=0:DIRPNT=1:NSYS=0:GOTO1200
1190REM handle no device connected error
1191IFPEEK(222)<>3ANDPEEK(222)<>8THEN9900
1192CALL-3288
1193?CHR$(7)
1194IFPEEK(222)=3THEN?"NO DEVICE AT SLOT ";S;", DRIVE ";D
1195IFPEEK(222)=8THEN?"I/O ERROR AT SLOT ";S;", DRIVE ";D
1196?
1197POKE216,0:GOTO1020
1200REM main loop
1210IFF$(FPNT,1)="DIR"THENGOSUB2000:FPNT=FPNT+1:GOTO1210
1220IFF$(FPNT,1)="SYS"THENGOSUB3000:FPNT=FPNT+1:GOTO1210
1230?:IFNSYSTHENM$="MORE "
1240?"NO ";M$;"SYS FILES ON THIS DISK. ";
1250M$=""
1260INPUT"";A$
1270GOTO1000
2000REM search a directory for DIR and SYS files
2010ONERRGOTO2900
2011?D$;"OPEN ";F$(FPNT,0);" ,TDIR"
2012?D$;"READ ";F$(FPNT,0)
2013INPUTF$:IFLEN(F$)<40THEN2013
2014INPUTF$
2100REM search directory loop
2110INPUTF$:ONF$=""GOTO2910
2111DIR$=MID$(F$,18,3):F$=MID$(F$,2,16)
2112GOSUB4000
2120F$(DIRPNT,0)=F$(FPNT,0)+"/"+F$
2130IFDIR$="DIR"THENF$(DIRPNT,1)="DIR":DIRPNT=DIRPNT+1
2140IFDIR$="SYS"THENF$(DIRPNT,1)="SYS":DIRPNT=DIRPNT+1
2150GOTO2110
2900REM handle end-of-file error
2901IFPEEK(222)<>5THEN9900
2902CALL-3288
2910POKE216,0
2911?D$;"CLOSE"
2912RETURN
3000REM do virus check on a SYS file
3005ONERRGOTO3900
3010?D$;"BLOAD";F$(FPNT,0);",A$300,L6,B0,TSYS"
3020DETECT=1:NSYS=NSYS+1:TTL=0
3030FORADR=771TO773
3031:TTL=TTL+PEEK(ADR):IFTTL>256THENTTL=TTL-256
3032NEXT
3040IFTTL<>57THEN3700
3050ADR=(PEEK(769)+(PEEK(770)*256))-8192
3060?D$;"BLOAD";F$(FPNT,0);",A$300,L4,B";ADR;",TSYS"
3070IFPEEK(768)<>32THENDETECT=0
3071IFPEEK(769)<>88THENDETECT=0
3072IFPEEK(770)<>255THENDETECT=0
3073IFPEEK(771)<>186THENDETECT=0
3690ONDETECTGOTO3800
3700REM no virus in this file
3710?"OK: ";F$(FPNT,0)
3720POKE216,0:RETURN
3800REM file appears infected
3810DCNT=DCNT+1
3820?CHR$(7)
3822?F$(FPNT,0);" APPEARS INFECTED."
3825?"   DELETE IT? (Y/N) ";
3830GETA$:?A$:?
3840IFA$="Y"ORA$="y"THENGOSUB3860
3850POKE216,0:RETURN
3860REM delete current file
3870?D$;"UNLOCK";F$(FPNT,0)
3880?D$;"DELETE";F$(FPNT,0)
3890RETURN
3900REM handle end-of-file error
3901IFPEEK(222)<>5THEN9900
3902CALL-3288
3903DETECT=0:GOTO3200
4000REM delete trailing spaces & slash in F$
4010FORI=LEN(F$)TO2STEP-1
4020IFMID$(F$,I,1)=" "ORMID$(F$,I,1)="/"THENF$=LEFT$(F$,I-1)
4030NEXT
4040RETURN
9900REM fatal error
9910?"ERROR #";PEEK(222);" IN LINE ";PEEK(218)+PEEK(219)*256
9920END
SAVE VIRUS.SCAN