('Open archiv: ', St,' ... ')
end;
procedure SearchNameInArchiv;
{--- надалі - пошук імені файлу в архіві ---}
begin
Seek (OutputF, FileSize (OutputF));
ErrorByte: = IOResult;
ErrorMessage;
end;
procedure DisposeCodeTable;
{ --- Знищення кодової таблиці і черги ---}
Var I: byte;
begin
For I: = 0 to 255 do Dispose (CodeTable [I]);
end;
procedure ClosePakFile;
{--- закриття архівіруемого файлу ---}
Var I: byte;
begin
If DeleteFile then Erase (InputF);
Close (InputF);
end;
procedure CloseArchiv;
{--- закриття архівного файлу ---}
begin
If FileSize (OutputF) = 0 then Erase (OutputF);
Close (OutputF);
end;
procedure InitCodeTable;
{ --- Ініціалізація таблиці кодування ---}
Var I: byte;
begin
For I: = 0 to 255 do
begin
New (CurPoint);
CodeTable [I]: = CurPoint;
With CodeTable [I] ^ do
begin
P0: = Nil;
P1: = Nil;
LengthBiteChain: = 0;
BiteChain: = 0;
CounterEnter: = 1;
Key: = True;
Index: = I;
end;
end;
For I: = 0 to 255 do
begin
If I> 0 then CodeTable [I-1] ^. NewRight: = CodeTable [I];
If I CurPoint ^. NewRight ^. CounterEnter then
begin
HelpPoint: = CurPoint ^. NewRight;
HelpPoint ^. NewLeft: = CurPoint ^. NewLeft;
CurPoint ^. NewLeft: = HelpPoint;
If HelpPoint ^. NewRightNil then HelpPoint ^. NewRight ^. NewLeft: = CurPoint;
CurPoint ^. NewRight: = HelpPoint ^. NewRight;
HelpPoint ^. NewRight: = CurPoint;
If HelpPoint ^. NewLeftNil then HelpPoint ^. NewLeft ^. NewRight: = HelpPoint;
If CurPoint = LeftRange then LeftRange: = HelpPoint;
If HelpPoint = RightRange then RightRange: = CurPoint;
CurPoint: = CurPoint ^. NewLeft;
If CurPoint = LeftRange then CurPoint: = CurPoint ^. NewRight
else CurPoint: = CurPoint ^. NewLeft;
end
else CurPoint: = CurPoint ^. NewRight;
end;
end;
procedure CounterNumberEnter;
{--- підрахунок частот входжень байтів в блоці ---}
Var C: word;
begin
For C: = 0 to NumRead-1 do
Inc (CodeTable [(InBuf [C])] ^. CounterEnter);
end;
function SearchOpenCode: boolean;
{ --- Пошук у черзі пари відкритих за Key мінімальних значень ---}
begin
CurPoint: = LeftRange;
HelpPoint: = LeftRange;
HelpPoint: = HelpPoint ^. NewRight;
While not CurPoint ^. Key do
CurPoint: = CurPoint ^. NewRight;
While (not (HelpPoint = RightRange)) and (not HelpPoint ^. Key) do
begin
HelpPoint: = He...