home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* STONTEST.PAS *)
- (* Checkt das angegebene Laufwerk auf den Stoned-Virus *)
- (* Mögliche Laufwerke : A..C, C: wird als Festplatte *)
- (* angenommen. *)
- (* Aufruf : STONTEST <Laufwerk:> *)
- (* (c) 1990 W.Rinke & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM StonedTest;
-
- USES Dos, Crt;
-
- CONST
- Log : STRING = 'PARTCODE.LOG';
- Look : STRING = 'Stoned';
-
- TYPE
- BufType = ARRAY [1..512] OF CHAR;
-
- VAR
- Regs : Registers;
- Buffer : BufType;
- i : INTEGER;
- ID, dv : STRING;
- f : TEXT;
- fopen : BOOLEAN;
-
- PROCEDURE RdSec(Sec, Drv : INTEGER; VAR Buf : BufType);
- BEGIN
- Regs.ah := 2;
- Regs.al := 1; { einen Sektor lesen }
- Regs.dh := 0; { Seite }
- Regs.ch := 0; { Zylinder }
- Regs.cl := Sec; { Sektor }
- Regs.dl := Drv; { Laufwerk }
- Regs.es := Seg(Buf);
- Regs.bx := Ofs(Buf);
- Intr($13, Regs);
- END;
-
- FUNCTION Ja : BOOLEAN;
- VAR
- ch : CHAR;
- BEGIN
- ch := ReadKey;
- IF UpCase(ch) = 'J' THEN
- Ja := TRUE
- ELSE
- Ja := FALSE;
- END;
-
- FUNCTION OpenLogFile : BOOLEAN;
- VAR
- ch : CHAR;
- BEGIN
- OpenLogFile := TRUE;
- Assign(f, Log);
- {$I-}
- Reset(f);
- {$I+}
- IF IOResult = 0 THEN BEGIN
- Write('Logdatei existiert bereits. ');
- WriteLn('Überschreiben [J/N] ? ');
- IF Ja THEN
- Rewrite(f)
- ELSE
- OpenLogFile := FALSE;
- END ELSE
- Rewrite(f);
- END;
-
- FUNCTION GetCurrDrive : INTEGER;
- BEGIN
- Regs.ah := $19;
- MsDos(Regs);
- GetCurrDrive := Regs.al;
- END;
-
- FUNCTION DriveSpec(VAR Drive : STRING) : INTEGER;
- VAR
- dummy : INTEGER;
- mb : BYTE;
- BEGIN
- CASE ParamCount OF
- 0 : BEGIN { Standard-Laufwerk }
- mb := 0;
- dummy := GetCurrDrive;
- Drive := Chr(dummy + 65) + ':';
- IF dummy = 2 THEN
- DriveSpec := $80; { Festplatte }
- END;
- 1 : BEGIN
- Drive := ParamStr(1);
- IF (Drive = 'a:') OR (Drive = 'A:') THEN
- DriveSpec := 0
- ELSE
- IF (Drive = 'b:') OR (Drive = 'B:') THEN
- DriveSpec := 1
- ELSE
- IF (Drive = 'c:') OR (Drive = 'C:') THEN
- DriveSpec := $80
- ELSE BEGIN
- WriteLn('Ungültige Laufwerksangabe');
- Close(f);
- Halt;
- END;
- END;
- ELSE
- WriteLn('Ungültige Anzahl von Parametern');
- Close(f);
- Halt;
- END;
- END;
-
- PROCEDURE Alarm;
- VAR
- i : INTEGER;
- BEGIN
- FOR i := 1 TO 3 DO BEGIN
- Sound(2000); Delay(200); NoSound; Delay(400);
- END;
- END;
-
- BEGIN
- ID := ''; dv := '';
- fopen := OpenLogFile;
- RdSec(1, DriveSpec(dv), Buffer);
- FOR i := 1 TO 512 DO BEGIN
- IF fopen THEN Write(f, Buffer[i]);
- IF Buffer[i] > #64 THEN
- IF Buffer [i] < #123 THEN
- ID := ID + Buffer[i];
- END;
- Close(f);
- IF Pos(Look, ID) <> 0 THEN BEGIN
- Alarm;
- Write('Laufwerk ', dv);
- WriteLn(' ist infiziert (Stoned-Virus)!');
- END;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von STONTEST.PAS *)