| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- type
- header=record
- title:array [1..22] of char;
- name:array [1..8] of char;
- pass:array [1..5] of char;
- end;
- const
- hh='Закодированный файл'#13#10#26;
- var
- f1,f2:file;
- t:header;
- buf:array [1..5000] of word;
- p1,p2:array [1..5] of char;
- m:word;
- s:string;
- w:word;
- function readkeyword:word; inline($b4/0/$cd/$16);
- procedure getpass(mess:string; var p);
- var
- pp:array [1..5] of byte absolute p;
- i,n:byte;
- ww:array [1..2] of byte absolute w;
- begin
- write(mess);
- s:='';
- write('░░░░░░░░░░░░░░░░░░░░'#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8);
- repeat
- m:=readkeyword;
- if m=$0E08 then
- if s<>'' then
- begin
- write(#8#176#8);
- delete(s,length(s)-1,2);
- end else
- else
- if (m<>$1C0D) and (length(s)<40) then
- begin
- s:=s+chr(lo(m))+chr(hi(m));
- write(#219);
- end;
- until m=$1C0D;
- fillchar(pp,5,0);
- w:=0;
- for i:=1 to length(s) do
- begin
- n:=ord(s[i]);
- pp[1]:=pp[1]+n;
- pp[2]:=pp[2]-n;
- pp[3]:=pp[3] xor n;
- pp[4]:=pp[4]+pp[1]+n;
- pp[5]:=pp[5]-pp[2]-n;
- ww[1]:=ww[1]+n;
- ww[2]:=ww[2] xor n;
- end;
- writeln;
- end;
- procedure help;
- begin
- writeln(#13#10'Вызов : CF <вх_файл> <вых_файл>');
- halt;
- end;
- procedure code(mess:string);
- var
- l,l1:longint;
- k,i:word;
- begin
- l:=filepos(f1); l1:=filesize(f1);
- while not eof(f1) do
- begin
- blockread(f1,buf,10000,k);
- for i:=1 to k div 2 do buf[i]:=buf[i] xor w;
- blockwrite(f2,buf,k);
- inc(l,k);
- write(mess);
- write((l/l1)*100:6:1,'%'#13);
- end;
- writeln;
- end;
- procedure work;
- begin
- reset(f1,1);
- rewrite(f2,1);
- blockread(f1,t,sizeof(t));
- if t.title<>hh then
- begin { Кодируем f1 в f2 }
- seek(f1,0);
- repeat
- getpass('Введите пароль : ',p1);
- getpass('И еще разок : ',p2);
- if p1<>p2 then writeln('Ошибочка !');
- until p1=p2;
- t.title:=hh;
- t.name:='????????';
- move(p1,t.pass,5);
- blockwrite(f2,t,sizeof(t));
- code('Кодирование : ');
- end else
- begin
- getpass('Введите пароль : ',p1);
- if p1<>t.pass then writeln('Ошибочка !') else
- begin
- seek(f1,0);
- blockread(f1,t,sizeof(t));
- code('Раскодирование : ');
- end;
- end;
- end;
- begin
- writeln('File Coder V1.0 (C) SEEM Group, 1993'#13#10);
- if paramcount<>2 then help;
- assign(f1,paramstr(1));
- assign(f2,paramstr(2));
- work;
- close(f1);
- close(f2);
- end.
|