home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Set of Apple II Hard Drive Images
/
hard.hdv
/
HARD
/
UTILS
/
VACCINE.V2.0
(
.txt
)
< prev
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS
UTF-8
Wrap
Applesoft BASIC Source Code
|
1991-06-07
|
2.7 KB
|
90 lines
|
[FC] Applesoft BASIC Program (0x0801)
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: FOR X = 1 TO 13: VTAB X: PRINT " ": NEXT
260 PRINT : PRINT TAB( 22)"*** NOTE ***": PRINT
270 PRINT TAB( 10)"This program will detect and disinfect:"
280 PRINT
290 PRINT TAB( 10)" o CyberAIDS"
300 PRINT TAB( 10)" o Festering Hate"
305 POKE 34,21
310 PRINT
320 PRINT TAB( 10)"Check (F)ile (V)olume or (D)irectory: ";: GOSUB 810
330 FIL = A$ = "F":DIR = A$ = "D":VOL = A$ = "V"
340 IF NOT (FIL OR DIR OR VOL) THEN PRINT : TEXT : END
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
350 PRINT : INPUT "Pathname: /";PH$:P$ = "/" +PH$:F$(1) = P$:F = 1
360 IF P$ = "" OR P$ = "/" THEN TEXT : 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.": PRINT D$"PREFIX /": GOTO 960
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
535 IF OFF <0 THEN OFF = 0
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 PRINT D$"PREFIX /": GOTO 960
750 PRINT : PRINT "This volume has a fuse! (counter = "I"/30)"
760 PRINT "Extinguish it? ";: GOSUB 810
770 IF A$ < >"Y" THEN PRINT D$"PREFIX /": END
780 POKE ADR +511,0:OP = 129: GOSUB 850: REM WRITE_BLOCK
790 PRINT "Done.": PRINT D$"PREFIX /": GOTO 960
800 :
810 GET A$: IF A$ = CHR$(27) THEN PRINT D$"PREFIX /": 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 "ProDOS MLI Error #"I" op="OP: PRINT D$"prefix /": TEXT : 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
950 :
960 FOR Z = 1 TO 2200: NEXT : RUN