[comp.sys.apple] Due to popular demand...

mdavis@pro-sol.cts.COM (Morgan Davis) (08/04/88)

Albeit against my wishes, I'm posting a new version of Wopfog after receiving
over twenty-some messages from around the net for requests to submit this.
Some asked to send it to APPLE2L, others asked not to.  Some asked to send it
to their e-mail addresses, others asked to send it to the newsgroup.  So,
because I know this works, and everyone who wants it will get it, and I'm
curious to see if the new BRL.MIL address is going to work, here goes.

If you don't like it, I have a list of 20-some addresses you can send hate
mail to.

--Morgan

    UUCP: crash!pnet01!pro-sol!mdavis
 ProLine: mdavis@pro-sol
 ARPANet: crash!pnet01!pro-sol!mdavis@nosc.mil
InterNet: mdavis@pro-sol.cts.com

------------------( Incise with HeNe laser here )------------------------

 100  REM ***********************************
 110  REM *                                 *
 120  REM *   CyberAIDS / Festering Hate    *
 130  REM *      Vaccination Utility        *
 140  REM *        by Morgan Davis          *
 150  REM *           29 Jul 88             *
 160  REM *                                 *
 170  REM * This will detect and remove the *
 180  REM * virus from SYS files.  It will  *
 190  REM * also fix byte $1FF of Block 2.  *
 200  REM *                                 *
 210  REM ***********************************
 220 :
 230  DIM F$(52):D$ =  CHR$ (4):BUF = 768:ADR = 8192
 240  HOME : IF  PEEK ( - 1101) = 6 THEN  PRINT D$"PR#3"
 250  LIST  - 210
 260  PRINT "*** NOTE ***": PRINT 
 270  PRINT "This program will detect and disinfect:"
 280  PRINT 
 290  PRINT "   o  CyberAIDS"
 300  PRINT "   o  Festering Hate"
 310  PRINT 
 320  PRINT "Check (F)ile or (D)irectory: ";: GOSUB 810
 330 FIL = A$ = "F":DIR = A$ = "D"
 340  IF  NOT (FIL OR DIR) THEN  PRINT : END 
 350  PRINT : INPUT "Pathname: ";P$:F$(1) = P$:F = 1
 360  IF P$ = "" THEN  END 
 370  PRINT D$"VERIFY"P$: PRINT 
 380  IF FIL THEN 480
 390  PRINT D$"PREFIX"P$
 400  PRINT D$"OPEN"P$",TDIR": PRINT D$"READ"P$
 410  INPUT A$: INPUT A$: INPUT A$:F = 0
 420  INPUT A$: IF A$ = "" THEN 450
 430  IF  MID$ (A$,18,3) = "SYS" THEN F = F + 1:F$(F) =  MID$ (A$,2,15)
 440  GOTO 420
 450  PRINT D$"CLOSE"
 460  IF  NOT F THEN  PRINT P$" has no SYS files.": END 
 470 :
 480  FOR I = 1 TO F
 490  PRINT "Checking "F$(I)"...";
 500  PRINT D$"BLOAD"F$(I)",TSYS,A"BUF",L3"
 510  IF  PEEK (BUF) <  > 76 THEN 700
 520 OFF = ( PEEK (BUF + 1) +  PEEK (BUF + 2) * 256) - ADR - 6
 530 X = BUF + 6
 540  PRINT D$"BLOAD"F$(I)",TSYS,A"BUF",L114,b"OFF
 550 ID =  PEEK (X + 107):V$ = "an unknown virus"
 560  IF ID = 199 THEN V$ = "Festering Hate"
 570  IF ID = 16 THEN V$ = "CyberAIDS"
 580  RESTORE 
 590  READ N: IF N =  PEEK (X) THEN X = X + 1: GOTO 590
 600  ON N >  = 0 GOTO 700
 610  PRINT "Infected by "V$"!" CHR$ (7): PRINT 
 620  PRINT "Completely heal this file? ";: GOSUB 810: PRINT 
 630  IF A$ <  > "Y" THEN 710
 640  PRINT "Working hard...";
 650  PRINT D$"BLOAD"F$(I)",TSYS,A"ADR
 660  FOR X = 0 TO 5: POKE ADR + X, PEEK (BUF + X): NEXT 
 670  PRINT D$"DELETE"F$(I): PRINT D$"CREATE"F$(I)",TSYS"
 680  PRINT D$"BSAVE"F$(I)",TSYS,A"ADR",L"OFF
 690  PRINT F$(I)" cured!": GOTO 710
 700  PRINT "not infected."
 710  NEXT 
 720 :
 730 OP = 128: GOSUB 850: REM READ_BLOCK
 740 I =  PEEK (ADR + 511): IF  NOT I THEN  END 
 750  PRINT : PRINT "This volume has a fuse! (counter = "I"/30)"
 760  PRINT "Extinguish it? ";: GOSUB 810
 770  IF A$ <  > "Y" THEN  END 
 780  POKE ADR + 511,0:OP = 129: GOSUB 850: REM WRITE_BLOCK
 790  PRINT "Done.": END 
 800 :
 810  GET A$: IF A$ =  CHR$ (27) THEN  END 
 820  IF A$ > "_" THEN A$ =  CHR$ ( ASC (A$) - 32)
 830  PRINT A$: RETURN 
 840 :
 850  POKE 768,32: POKE 769,0: POKE 770,191: REM JSR $BF00
 860  POKE 771,OP: POKE 772,9: POKE 773,3: REM   DB  OP / DW $0309
 870  POKE 774,133: POKE 775,0: POKE 776,96: REM STA $00 / RTS
 880  POKE 777,3: POKE 778, PEEK (48944)
 890  POKE 779,ADR -  INT (ADR / 256) * 256: POKE 780, INT (ADR / 256)
 900  POKE 781,2: POKE 782,0
 910  CALL 768:I =  PEEK (0): IF I THEN  PRINT "MLI Err #"I" OP="OP: END 
 920  RETURN 
 930 :
 940  DATA 32,88,255,186,189,0,1,141,1,3,202,189,0,1,141,0,3,238,0,3,-1

--------------( This is the end, and aren't you glad? )------------------