home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / CODEIT.ZIP / DECODEIT.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-03-29  |  2.7 KB  |  140 lines

  1. Program DECODEIT;
  2. Const
  3.   MaxBuf = 30000;
  4. Var
  5.   Password      : String[6];
  6.   seed1, seed2, seed1x, seed2x  : Byte;
  7.   source, dest  : File;
  8.   buffer        : Array [1..MaxBuf] of Byte;
  9.   BytesRead     : Real;
  10.   i             : Integer;
  11.  
  12. (********************************************************************)
  13.  
  14. Procedure OpenFiles;
  15. Const
  16.   s : Array [1..6] Of Char = ('L','O','C','K','E','D');
  17. Begin
  18. Assign(source,ParamStr(1));
  19. (*$I-*)
  20. Reset(source,1);
  21. (*$I+*)
  22. If IOResult <> 0 Then
  23.   Begin
  24.   Writeln('File not found.');
  25.   Halt;
  26.   End;
  27.  
  28. BlockRead(source,buffer,6);
  29. If Not ((buffer[1] = ord('L')) And
  30.        (buffer[2] = ord('O')) And
  31.        (buffer[3] = ord('C')) And
  32.        (buffer[4] = ord('K')) And
  33.        (buffer[5] = ord('E')) And
  34.        (buffer[6] = ord('D'))) Then
  35.       Begin
  36.        Writeln('File is not locked.');
  37.        Halt;
  38.        End;
  39.  
  40. BlockRead(source,Seed1x, 1);
  41. BlockRead(source,Seed2x, 1);
  42.  
  43. If ((seed1 <> Seed1x) OR (seed2 <> Seed2x)) Then
  44.   Begin
  45.   Writeln('Wrong Password.');
  46.   Halt;
  47.   End;
  48.  
  49. Assign(dest,'$$$$$.$$');
  50. Rewrite(dest,1);
  51.  
  52. End;
  53.  
  54. (****************************************************************)
  55.  
  56. Procedure GetSeed;
  57. Var
  58.   i, j : Integer;
  59. Begin
  60. Seed1 := 0;
  61. Seed2 := 0;
  62. Password := ParamStr(2);
  63.  
  64. j := Length(Password);
  65. For i:= 1 to Length(Password) Do
  66.   Begin
  67.   Seed1 := Seed1 + (Ord(Password[i]) * i);
  68.   Seed2 := Seed2 + (Ord(Password[i]) * i);
  69.   j := j - 1;
  70.   End;
  71. End;
  72.  
  73. (*****************************************************************)
  74.  
  75. Procedure DecodeFiles;
  76. Var
  77.   i1, i2 : Byte;
  78.   rr     : Integer;
  79. Begin
  80. i1 := Seed1;
  81. i2 := Seed2;
  82. BytesRead := 0;
  83. BlockRead(source, buffer, MaxBuf, rr);
  84. BytesRead := BytesRead + rr;
  85. While rr > 0 Do
  86.   Begin
  87.   For i := 1 to rr Do
  88.     Begin
  89.     i1 := i1 - i;
  90.     i2 := i2 +i;
  91.     If odd(i) Then
  92.       buffer[i] := buffer[i] + i1
  93.     Else
  94.       buffer[i] := buffer[i] - i2;
  95.     End;
  96.   BlockWrite(dest, buffer, rr);
  97.   BlockRead(source, buffer, MaxBuf, rr);
  98.   BytesRead := BytesRead + rr;
  99.   End;
  100. End;
  101.  
  102. (*******************************************************************)
  103.  
  104. Procedure CloseFiles;
  105. Var
  106.   i : Integer;
  107. Begin
  108. Rewrite(source, 1);
  109. FillChar(buffer, MaxBuf, 0);
  110. While BytesRead > 0 Do
  111.   Begin
  112.   If BytesRead > MaxBuf Then
  113.     BlockWrite(source, buffer, MaxBuf)
  114.   Else
  115.     Begin
  116.     i := Trunc(BytesRead);
  117.     BlockWrite(source, buffer, i);
  118.     End;
  119.   BytesRead := BytesRead - MaxBuf;
  120.   End;
  121. Close(source);
  122. Close(dest);
  123. Erase(source);
  124. Rename(dest, ParamStr(1));
  125. End;
  126.  
  127. (***************************************************************)
  128.  
  129.  
  130. Begin
  131. If Paramcount <> 2 Then
  132.   Begin
  133.   Writeln('Syntax: DECODEIT Filename password');
  134.   Halt;
  135.   End;
  136. Getseed;
  137. OpenFiles;
  138. DecodeFiles;
  139. CloseFiles;
  140. End.