home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / insidetp / 1990_10 / cloak.pas next >
Pascal/Delphi Source File  |  1990-10-01  |  2KB  |  89 lines

  1. PROGRAM Cloak;
  2.  
  3. USES Crt,FCUnit;
  4.  
  5. CONST
  6.   EndofFile = Chr(26);
  7.   ProtectMarker : String = Chr(195)+Chr(180);
  8.  
  9. TYPE
  10.   EofAction = (Add, Remove, NoAction);
  11.   XFileObj1 = OBJECT(FileObj)
  12.     PROCEDURE AddEOF(Message: String);
  13.     PROCEDURE DelEOF;
  14.     END;
  15.  
  16. PROCEDURE XFileObj1.AddEOF;
  17. BEGIN
  18.   BlockWrite(Fp, Message[1], Length(Message))
  19.   END;
  20.  
  21. PROCEDURE XFileObj1.DelEOF;
  22. VAR
  23.   Intro   : DataBlk;
  24.   Size,I  : Integer;
  25. BEGIN
  26.   ReadBlock(Intro,Size);
  27.   I := 1;
  28.   WHILE (I <= Size) AND (Intro[I] <> Ord(EndofFile)) DO
  29.     Inc(I);
  30.   IF (I > 255) OR
  31.     (Intro[1] <> Ord(ProtectMarker[1])) OR
  32.     (Intro[2] <> Ord(ProtectMarker[2])) OR
  33.     (Intro[I-2] <> Ord(ProtectMarker[1])) OR
  34.     (Intro[I-1] <> Ord(ProtectMarker[2])) THEN BEGIN
  35.      WriteLn('File not protected');
  36.      Halt(1)
  37.      END;
  38.   Seek(Fp,Longint(I));
  39.   END;
  40.  
  41. VAR
  42.    InFile,
  43.    OutFile : XFileObj1;
  44.    Data    : DataBlk;
  45.    Size    : Integer;
  46.    Option  : Byte;
  47.    Msg     : String;
  48.  
  49. BEGIN
  50.   ClrScr;
  51.   WriteLn('Cloaking program');
  52.   WriteLn;
  53.   WriteLn('       1 to cloak FILE');
  54.   WriteLn('       2 to uncloak a FILE');
  55.   WriteLn('       0 to quit');
  56.   WriteLn;
  57.   Write('Input: ');
  58.   ReadLn(Option);
  59.   IF Option = 0 THEN BEGIN
  60.      WriteLn('Program Terminated');
  61.      Halt;
  62.      END;
  63.  
  64.   CASE Option OF
  65.     1 : BEGIN
  66.           Msg := ProtectMarker + '-- You can''t touch this --' +
  67.                      ProtectMarker + EndofFile;
  68.           InFile.OpenFile('TESTFILE.TXT', Input);
  69.           OutFile.OpenFile('TESTFILE.CPY', Output);
  70.           OutFile.AddEOF(Msg);
  71.           END;
  72.     2 : BEGIN
  73.           InFile.OpenFile('TESTFILE.CPY', Input);
  74.           InFile.DelEOF;
  75.           OutFile.OpenFile('TESTFILE.CHK', Output);
  76.           END;
  77.    END;
  78.  
  79.    REPEAT
  80.      InFile.ReadBlock(Data, Size);
  81.      OutFile.WriteBlock(Data, Size);
  82.    UNTIL Size <> SizeOf(DataBlk);
  83.  
  84.    InFile.CloseFile;
  85.    OutFile.CloseFile;
  86.    Write('Press Enter to quit ... ');
  87.    ReadLn;
  88. END.
  89.