home *** CD-ROM | disk | FTP | other *** search
- Program Encode;
- Const
- MaxBuf = 30000;
- Var
- Password : String[6];
- seed1, seed2 : Byte;
- source, dest : File;
- buffer : Array [1..MaxBuf] of Byte;
- BytesRead : Real;
- i : Integer;
-
- (********************************************************************)
-
- Procedure OpenFiles;
- Const
- s : Array [1..6] Of Char = ('L','O','C','K','E','D');
- Begin
- Assign(source,ParamStr(1));
- (*$I-*)
- If IOResult <> 0 Then
- Begin
- Writeln('File not found.');
- Halt;
- End;
-
- BlockRead(source,buffer,6);
- If ((buffer[1] = ord('L')) And
- (buffer[2] = ord('O')) And
- (buffer[3] = ord('C')) And
- (buffer[4] = ord('K')) And
- (buffer[5] = ord('E')) And
- (buffer[6] = ord('D'))) Then
- Begin
- Writeln('File is already locked.');
- Halt;
- End;
-
- Reset(source,1);
- Assign(dest,'$$$$$.$$');
- Rewrite(dest,1);
- BlockWrite(dest,s,6);
- BlockWrite(dest,seed1,1);
- BlockWrite(dest,seed2,1);
- End;
-
- (****************************************************************)
-
- Procedure GetSeed;
- Var
- i, j : Integer;
- Begin
- Seed1 := 0;
- Seed2 := 0;
- Password := ParamStr(2);
-
- j := Length(Password);
- For i:= 1 to Length(Password) Do
- Begin
- Seed1 := Seed1 + (Ord(Password[i]) * i);
- Seed2 := Seed2 + (Ord(Password[i]) * i);
- j := j - 1;
- End;
- End;
-
- (*****************************************************************)
-
- Procedure EncodeFiles;
- Var
- i1, i2 : Byte;
- rr : Integer;
- Begin
- i1 := Seed1;
- i2 := Seed2;
- BytesRead := 0;
- BlockRead(source, buffer, MaxBuf, rr);
- BytesRead := BytesRead + rr;
- While rr > 0 Do
- Begin
- For i := 1 to rr Do
- Begin
- i1 := i1 - i;
- i2 := i2 +i;
- If odd(i) Then
- buffer[i] := buffer[i] - i1
- Else
- buffer[i] := buffer[i] + i2;
- End;
- BlockWrite(dest, buffer, rr);
- BlockRead(source, buffer, MaxBuf, rr);
- BytesRead := BytesRead + rr;
- End;
- End;
-
- (*******************************************************************)
-
- Procedure CloseFiles;
- Var
- i : Integer;
- Begin
- Rewrite(source, 1);
- FillChar(buffer, MaxBuf, 0);
- While BytesRead > 0 Do
- Begin
- If BytesRead > MaxBuf Then
- BlockWrite(source, buffer, MaxBuf)
- Else
- Begin
- i := Trunc(BytesRead);
- BlockWrite(source, buffer, i);
- End;
- BytesRead := BytesRead - MaxBuf;
- End;
- Close(source);
- Close(dest);
- Erase(source);
- Rename(dest, ParamStr(1));
- End;
-
- (***************************************************************)
-
- Begin
- If Paramcount <> 2 Then
- Begin
- Writeln('Syntax: ENCODEIT Filename password');
- Halt;
- End;
- Getseed;
- OpenFiles;
- EncodeFiles;
- CloseFiles;
- End.
-
-
-
-
-
-