{ это интерфейс кода C++.
исходный код c++ не включен в этот архив.
для получения дополнительной информации посмотрите файл readme.txt. }
#ifndef __coding_h__
#define __coding_h__
#ifndef coding_impex
#define coding_impex __declspec(dllimport)
#endif
класс coding_impex avldecode
{
публика:
~avldecode();
авльдекод();
виртуальный int readbuf
(void*buf,
беззнаковыймакслен,
беззнаковый &rdlen
) = 0;
intget(void *buf, unsignedmaxlen);
intget(void *buf, unsignedmaxlen, unsigned &rdlen)
{return ((int)(rdlen = get(buf, maxlen)) <0)? рдлен: 0;
}
недействительный сброс();
частный:
????????? частная часть не включена ???????????????????
};
класс coding_impex avlencode
{
публика:
~авленкод();
авленкод();
виртуальный int writebuf
(void*buf,
неподписанный
) = 0;
intput(void *buf, unsignedn);
недействительный сброс();
частный:
???????????? частная часть не включена ???????????????
};
#endif //__coding_h__
///encode.pas
{$ млн 8192,120000,120000}
использует avlcodes;
константный размер буфера = 60000;
вар р: указатель;
f,f1: файл;
с: строка;
буф: указатель;
число: слово;
{$f+}
функция writetofile(var buf; n: целое число): целое число;
вар номер: слово;
начинать
blockwrite(f1,buf,n,num);
конец;
{$f-}
начинать
если не получить память, то
начинать
writeln('в куче недостаточно памяти для сжатия файла.');
остановка;
конец;
с:=параметр(1);
setencodeoutbuffer(@writetofile);
назначить (е, с);
{$i-}
если s<>'', то сброс(f,1);
{$я+}
если (ioresult<>0) или (s=''), то
начинать
написатьln;
writeln('автором этой программы на турбо-паскале и оригинального кода на C++');
writeln('Александр Ларкин(переведено на турбо-паскаль с C++ 27.09.1999)');
написатьln;
writeln('электронная почта:[электронная почта защищена]');
writeln('Интернет: http://www.geocities.com/siliconvalley/6235/tpdl.htm');
написатьln;
writeln('использование: encode.exe infile outfile [пароль]');
написатьln;
свободная память;
остановка;
конец;
с:=параметр(2);
назначить (f1, с);
{$i-}
если s<>'', то rewrite(f1,1);
{$я+}
если (ioresult<>0) или (s=''), то
начинать
закрыть (е);
writeln('невозможно создать файл поиска '+s);
свободная память;
остановка;
конец;
установитьпароль(параметр(3));
getmem (буф, размер буфера);
повторить
blockread(f,buf^,bufsize,num);
кодировать (buf^,num);
до тех пор, пока число <= 0;
if num<0 then writeln('невозможно сжать файл. вы делаете что-то не так.');
сброс кодирования;
закрыть (е);
закрыть (f1);
свободная память;
конец.
///декодирование.пас
{$ млн 8192,120000,120000}
использует avlcodes;
константный размер буфера = 60000;
вар р: указатель;
f,f1: файл;
с: строка;
буф: указатель;
число: слово;
{$f+}
функция readfromfile(var buf; n: целое число; var rdlen: целое число): целое число;
начинать
blockread(f,buf,n,rdlen);
чтение из файла: = 0;
конец;
{$f-}
начинать
если не получить память, то
начинать
writeln('в куче недостаточно памяти для распаковки файла.');
остановка;
конец;
с:=параметр(1);
setdecodeinbuffer(@readfromfile);
назначить (е, с);
{$i-}
если s<>'', то сброс(f,1);
{$я+}
если (ioresult<>0) или (s=''), то
начинать
написатьln;
writeln('автором этой программы на турбо-паскале и оригинального кода на C++');
writeln('Александр Ларкин(переведено на турбо-паскаль с C++ 27.09.1999)');
написатьln;
writeln('электронная почта:[электронная почта защищена]');
writeln('Интернет: http://www.geocities.com/siliconvalley/6235/tpdl.htm');
написатьln;
writeln('использование: infile decode.exe outfile [пароль]');
написатьln;
свободная память;
остановка;
конец;
с:=параметр(2);
назначить (f1, с);
{$i-}
если s<>'', то rewrite(f1,1);
{$я+}
если (ioresult<>0) или (s=''), то
начинать
закрыть (е);
writeln('невозможно создать файл '+s);
свободная память;
остановка;
конец;
getmem (буф, размер буфера);
установитьпароль(параметр(3));
повторить
num:=decodeget(buf^,bufsize);
если num<65535, то blockwrite(f1,buf^,num,num);
до (num=0) или (num=65535);
если num=65535, то writeln('ошибка! данные повреждены. невозможно распаковать файл.');
закрыть (е);
закрыть (f1);
свободная память;
конец.