home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / hard.hdv / UTILS / VACCINE.V2.0.bas < prev   
BASIC Source File  |  2020-08-13  |  4KB  |  90 lines

  1. 100  REM ***********************************
  2. 110  REM *                                 *
  3. 120  REM *   CyberAIDS / Festering Hate    *
  4. 130  REM *      Vaccination Utility        *
  5. 140  REM *        by Morgan Davis          *
  6. 150  REM *           29 Jul 88             *
  7. 160  REM *                                 *
  8. 170  REM * This will detect and remove the *
  9. 180  REM * virus from SYS files.  It will  *
  10. 190  REM * also fix byte $1FF of Block 2.  *
  11. 200  REM *                                 *
  12. 210  REM ***********************************
  13. 220 :
  14. 230  DIM F$(52):D$ =  CHR$(4):BUF = 768:ADR = 8192
  15. 240  HOME : IF  PEEK( -1101) = 6  THEN  PRINT D$"PR#3"
  16. 250  LIST  -210: FOR X = 1 TO 13: VTAB X: PRINT "         ": NEXT 
  17. 260  PRINT : PRINT  TAB( 22)"*** NOTE ***": PRINT 
  18. 270  PRINT  TAB( 10)"This program will detect and disinfect:"
  19. 280  PRINT 
  20. 290  PRINT  TAB( 10)"   o  CyberAIDS"
  21. 300  PRINT  TAB( 10)"   o  Festering Hate"
  22. 305  POKE 34,21
  23. 310  PRINT 
  24. 320  PRINT  TAB( 10)"Check (F)ile (V)olume or (D)irectory: ";: GOSUB 810
  25. 330 FIL = A$ = "F":DIR = A$ = "D":VOL = A$ = "V"
  26. 340  IF   NOT (FIL  OR DIR  OR VOL)  THEN  PRINT : TEXT : END 
  27. 345  IF VOL  THEN  PRINT : INPUT "Enter volume number (in for s7 or s6): ?";PF$: PRINT D$"prefix,"PF$: PRINT D$"prefix": INPUT P$:F$(1) = P$:F = 1:VOL = A$ = "D":DIR = A$ = "V": GOTO 370
  28. 350  PRINT : INPUT "Pathname: /";PH$:P$ = "/" +PH$:F$(1) = P$:F = 1
  29. 360  IF P$ = ""  OR P$ = "/"  THEN  TEXT : END 
  30. 370  PRINT D$"VERIFY"P$: PRINT 
  31. 380  IF FIL  THEN 480
  32. 390  PRINT D$"PREFIX"P$
  33. 400  PRINT D$"OPEN"P$",TDIR": PRINT D$"READ"P$
  34. 410  INPUT A$: INPUT A$: INPUT A$:F = 0
  35. 420  INPUT A$: IF A$ = ""  THEN 450
  36. 430  IF  MID$ (A$,18,3) = "SYS"  THEN F = F +1:F$(F) =  MID$ (A$,2,15)
  37. 440  GOTO 420
  38. 450  PRINT D$"CLOSE"
  39. 460  IF   NOT F  THEN  PRINT P$" has no SYS files.": PRINT D$"PREFIX /": GOTO 960
  40. 470 :
  41. 480  FOR I = 1 TO F
  42. 490  PRINT "Checking "F$(I)"...";
  43. 500  PRINT D$"BLOAD"F$(I)",TSYS,A"BUF",L3"
  44. 510  IF  PEEK(BUF) < >76  THEN 700
  45. 520 OFF = ( PEEK(BUF +1) + PEEK(BUF +2) *256) -ADR -6
  46. 530 X = BUF +6
  47. 535  IF OFF <0  THEN OFF = 0
  48. 540  PRINT D$"BLOAD"F$(I)",TSYS,A"BUF",L114,b"OFF
  49. 550 ID =  PEEK(X +107):V$ = "an unknown virus"
  50. 560  IF ID = 199  THEN V$ = "Festering Hate"
  51. 570  IF ID = 16  THEN V$ = "CyberAIDS"
  52. 580  RESTORE 
  53. 590  READ N: IF N =  PEEK(X)  THEN X = X +1: GOTO 590
  54. 600  ON N > = 0 GOTO 700
  55. 610  PRINT "Infected by "V$"!" CHR$(7): PRINT 
  56. 620  PRINT "Completely heal this file? ";: GOSUB 810: PRINT 
  57. 630  IF A$ < >"Y"  THEN 710
  58. 640  PRINT "Working hard...";
  59. 650  PRINT D$"BLOAD"F$(I)",TSYS,A"ADR
  60. 660  FOR X = 0 TO 5: POKE ADR +X, PEEK(BUF +X): NEXT 
  61. 670  PRINT D$"DELETE"F$(I): PRINT D$"CREATE"F$(I)",TSYS"
  62. 680  PRINT D$"BSAVE"F$(I)",TSYS,A"ADR",L"OFF
  63. 690  PRINT F$(I)" cured!": GOTO 710
  64. 700  PRINT "not infected."
  65. 710  NEXT 
  66. 720 :
  67. 730 OP = 128: GOSUB 850: REM READ_BLOCK
  68. 740 I =  PEEK(ADR +511): IF   NOT I  THEN  PRINT D$"PREFIX /": GOTO 960
  69. 750  PRINT : PRINT "This volume has a fuse! (counter = "I"/30)"
  70. 760  PRINT "Extinguish it? ";: GOSUB 810
  71. 770  IF A$ < >"Y"  THEN  PRINT D$"PREFIX /": END 
  72. 780  POKE ADR +511,0:OP = 129: GOSUB 850: REM WRITE_BLOCK
  73. 790  PRINT "Done.": PRINT D$"PREFIX /": GOTO 960
  74. 800 :
  75. 810  GET A$: IF A$ =  CHR$(27)  THEN  PRINT D$"PREFIX /": END 
  76. 820  IF A$ >"_"  THEN A$ =  CHR$( ASC(A$) -32)
  77. 830  PRINT A$: RETURN 
  78. 840 :
  79. 850  POKE 768,32: POKE 769,0: POKE 770,191: REM JSR $BF00
  80. 860  POKE 771,OP: POKE 772,9: POKE 773,3: REM   DB  OP / DW $0309
  81. 870  POKE 774,133: POKE 775,0: POKE 776,96: REM STA $00 / RTS
  82. 880  POKE 777,3: POKE 778, PEEK(48944)
  83. 890  POKE 779,ADR - INT(ADR/256) *256: POKE 780, INT(ADR/256)
  84. 900  POKE 781,2: POKE 782,0
  85. 910  CALL 768:I =  PEEK(0): IF I  THEN  PRINT "ProDOS MLI Error #"I" op="OP: PRINT D$"prefix /": TEXT : END 
  86. 920  RETURN 
  87. 930 :
  88. 940  DATA 32,88,255,186,189,0,1,141,1,3,202,189,0,1,141,0,3,238,0,3,-1
  89. 950 :
  90. 960  FOR Z = 1 TO 2200: NEXT : RUN