Ru-Board.club
← Вернуться в раздел «Программы»

» FreeArc: бесплатный open-source архиватор - Часть 3

Автор: l1720
Дата сообщения: 03.11.2009 10:02

Цитата:
New modes -mex1 .. -mex4

Какая прелесть! Скорость впечатляет.
Bulat_Ziganshin
А тестовые версии сейчас скачиваются только целиком и в зипе? Или можно как раньше - только измененную часть и в arc?

При архивировании через гуи -mex информационное окошко по сравнению со старыми алгоритмами "колбасит".

Автор: A19EXXX
Дата сообщения: 03.11.2009 12:08
Bulat_Ziganshin,

Цитата:
New modes -mex1 .. -mex4

Очень интересно , вот только я в этом не особо разбираюсь и интересуем меня следующее: я привык использовать -mx -ld768m для сжатия, есть ли аналог с такой степенью сжатия, только через -mex (или другое, но чтобы скорость сжатия\распаковки была выше и это не отражалось на сжатии?
Автор: Bulat_Ziganshin
Дата сообщения: 03.11.2009 18:57
new modes will remain in the 0.60 and following alphas, but these are still experimental, meaning that

* compression format may be changed at any time, so you will be unable to decompress such archives
* it's new (unless we count 4x4.exe as prototype), so it may have bugs
* it's not yet as efficient as possible, in particular compression is bad for binary files in -mex4 and text files in -mex3/4

so, my goal, as usual, is to show you the technology, debug it, optimize it, find best compression parameters and finally replace -m1..-m4 with -mex1...-mex5 in 0.70 or so

about improving -mx speed - there are no such plans. in the far future i plan to improve its compression, though, by using larger lzma dictionaries



Цитата:
А от того, что mex еще не оптимизирован под text, степень сжатия ниже не будет по сравнению с m ?

во-первых, напрямую они не сравнимы. во-вторых, я пока туда наколбасил такое сжатие текстов, которое максимально распараллеливается, но при этом степень сжатия не очень хороша. это как раз одна из тех доработок которые я буду делать - взять нынешние режимы текстового сжатия и сделать их полностью многопоточными


Цитата:
И еще вопрос - планируются ли более мощные mex режимы?

-mex5 будет - аналог нынешнего -m4 с более быстрым сжатием текстов


Цитата:
А тестовые версии сейчас скачиваются только целиком и в зипе? Или можно как раньше - только измененную часть и в arc?

только целиком. хотя я могу добавить и создание arc...


Цитата:
При архивировании через гуи -mex информационное окошко по сравнению со старыми алгоритмами "колбасит".

да, вот и ещё один из недостатков моей нынешней реализации многопоточности. это решаемо, к 0.70 сделаю

Добавлено:
actually, new compression modes are very like lzma2 multi-threading option. let's compare:

7-zip advantages:

* lzma2 skips incompressible data, improving both ratio and decompression speed
* it may be used with BCJ2, improving overall compression
* there is 64-bit version that is 10% faster and allows you to run, for example 8 compression threads with 1gb dictionary each

freearc advantages:

* with HT4, memory usage is much smaller
* there is also m/t for tornado, grzip and forthcoming ppmdj algorithm that provides much larger "decision space"
* it has delta and rep algos. rep is especially important since it removes repetitions BEFORE data are split into small independently compressed chunks
* it's much easier to develop your very own compression profile and save it to arc.ini
Автор: ruduk
Дата сообщения: 03.11.2009 21:32
Bulat_Ziganshin

Цитата:
вот и ещё один из недостатков моей нынешней реализации многопоточности. это решаемо, к 0.70 сделаю

планы не поменялись? По FuturePlans версия 0.70 в Январе?

Просто хочу определиться сколько у меня есть времени для перевода changelog_full_rus и eng. Хочу успеть все перевести
Если бы Вы знали, как нехватает времени для перевода, но я над этим работаю. Уже сделал ~20% (с 0.01 до 0.40-pre 3) каждого файла. Хотел дойти до 0.52, а тут Вы новых версий навыпускали Да и потом ремонт у меня затеяли, небыло времени... Но теперь все закончилось и я опять взялся за перевод.
Кстати, спасибо за новые версии.
Еще хотел спросить как часто обновлять файл (тот, что на SVN)? Я собираю новые версии в "папочку" и после 2-3 новых RC выкладываю. или это нужно делать сразу и оперативно?
Автор: WildGoblin
Дата сообщения: 03.11.2009 22:33
Bulat_Ziganshin

Цитата:
* compression format may be changed at any time, so you will be unable to decompress such archives

Если format may be changed at any time тогда думаю ещё рано заниматся продвижением FreeArс
Может сделать отдельный бранч для всех новшеств и отдельный для более-менее стабильной версии?
Автор: Bulat_Ziganshin
Дата сообщения: 03.11.2009 22:43
WildGoblin
речь идёт об экспериментальных методах сжатия. старые-то методы никуда не делись


Цитата:
планы не поменялись? По FuturePlans версия 0.70 в Январе?

да. я сейчас кое-что сделал, включу это для экспериментов. а к версии 70 мы с этим разберёмся, отполируем, исправим ошибки и тогда это уже станет основными методами сжатия


Цитата:
Я собираю новые версии в "папочку" и после 2-3 новых RC выкладываю. или это нужно делать сразу и оперативно?

делай как тебе удобно
Автор: Bulat_Ziganshin
Дата сообщения: 04.11.2009 08:46
I have filed a Bug in Launchpad that FreeArc is not in the official Ubuntu repositories.
You can support this by subscribing.

https://bugs.launchpad.net/ubuntu/+bug/473471

Добавлено:
ruduk
слушай, если ты перевёл уже часть, давай её выложим и я ссылку с русской страницы исправлю. назови её changelog_full_ru.htm
Автор: Sergey_Advisor
Дата сообщения: 04.11.2009 13:32
Bulat_Ziganshin, если я доведу до ума консольный пре-архиватор то вы под него добавите ключи? Или делать отдельную GUI утилиту?

crotoff, данный ключ: cab -LZX:21 -dirs -i a lang.cab Lang\*.* не забирает вложенные файлы и папки ниже 1го уровня, можешь дать строку которая сгребает все?
Автор: Bulat_Ziganshin
Дата сообщения: 04.11.2009 13:42

Цитата:
Bulat_Ziganshin, если я доведу до ума консольный пре-архиватор то вы под него добавите ключи? Или делать отдельную GUI утилиту?

я так и не понял - что она делает?

для cab'ов можешь попробовать мой http://freearc.org/download/old/caban10b.zip
Автор: Sergey_Advisor
Дата сообщения: 04.11.2009 14:09
"я так и не понял - что она делает?"

Пока она ищет в папке архивы форматов: cab,zip,jar и распаковывает архивы с такими расширениями из: архив.cab в папку $$архив.cab и удаляет архив. По идее от пережатия FreeArc'ком мы можем получить серьезный выигрыш в сжатии.

Если все пойдет как надо, то потом она будет сворачивать папки обратно в архивы ака "как было"

P.S. Я что то делаю не так (caban.exe a "C:\MsCab063.cab" "C:\MsCab063\") или он пути не сохраняет?
Автор: Bulat_Ziganshin
Дата сообщения: 04.11.2009 17:25

Цитата:
P.S. Я что то делаю не так (caban.exe a "C:\MsCab063.cab" "C:\MsCab063\") или он пути не сохраняет?

в таком виде должно работать:
cd C:\MsCab063
caban.exe a "C:\MsCab063.cab" -r
Автор: juvaforza
Дата сообщения: 04.11.2009 17:49
Bulat_Ziganshin
Сейчас, если использовать для сжатия неправильный параметр (напр. -merr), то появляется станд. диалог выполнения операции добавления, но:
- ничего об корректности параметра не сообщается;
- никаких действий в диалоге не происходит;
- а после нажатия Отмена диалог закрывается.
Автор: Bulat_Ziganshin
Дата сообщения: 04.11.2009 17:57
ну вы прям мой history читаете:

Цитата:
gui-версия не обрабатывает правильно ошибки:
a x:\a
-mqq
Автор: l1720
Дата сообщения: 05.11.2009 12:05
Bulat_Ziganshin

Цитата:
Цитата:

Цитата: А тестовые версии сейчас скачиваются только целиком и в зипе? Или можно как раньше - только измененную часть и в arc?

только целиком. хотя я могу добавить и создание arc...
Автор: Bulat_Ziganshin
Дата сообщения: 05.11.2009 21:19
new version:

* by popular requests, restored arc.arc distribution variant
* LZP decompression made 2x faster, meaning 20% faster -m3t decompression and 5% faster -m4t..9t decompression
* new mode -mex5 = -m4b + m/t ppmd

-mex5t
Compressed 1 file, 100.000.000 => 23.020.387 bytes. Ratio 23.0%
Compression time: cpu 44.55 secs, real 18.90 secs. Speed 5.291 kB/s
Testing time: cpu 36.89 secs, real 11.17 secs. Speed 8.953 kB/s

-m4t
Compressed 1 file, 100.000.000 => 22.921.358 bytes. Ratio 22.9%
Compression time: cpu 33.48 secs, real 33.23 secs. Speed 3.009 kB/s
Testing time: cpu 26.79 secs, real 26.48 secs. Speed 3.777 kB/s

at average, it's 2x faster with 0.5% less compression
Автор: DemonAk
Дата сообщения: 06.11.2009 11:56
Bulat_Ziganshin
Привет, я вот репак сделал у меня он нормально устанавливается (моя винда win7_x64), для распаковки требуется 1гб, так вот у меня парень его скачал, у него на винте свободно 12 гб (игра для установки требует 7 гб, прекомпом не жал) и у него не хватает места на жестком диске т.е распаковка то идет, но сначала копируется архив в темп, а потом его извлечение, а такого не должно быть (по крайней мере у меня такого нет), unarc.dll используемый в инсталяторе от 15.10.09. Оперативки у парня 2гб винда вроде xp, скомпилил setup с unarc.dll от 05.11.09 и дал ему посмотрим может проканает. Если все нормально будет отпишусь. параметры сжатия такие были -ld1gb -mm=max -m=exe+rep:1gb:a99+lzma:190mb:normal:bt4:273:mc10000, скрипт использовал виктора последний. И с последним unarc.dll такая же ерунда. Вроде и комп у него более менее pentium d 2.8 Ггц, оперы 2гб и винда xpsp3.
Автор: Nuke142
Дата сообщения: 06.11.2009 17:25
Подскажите, а как sfx редактировать ? Restorator 2007 не может диалоги отобразить - зашифрованы.
Автор: egor23
Дата сообщения: 06.11.2009 17:33
Nuke142

Цитата:
Подскажите, а как sfx редактировать ? Restorator 2007 не может диалоги отобразить - зашифрованы.

наверно для начала распаковать, т.к. sfx зажаты upx.
Автор: Nuke142
Дата сообщения: 06.11.2009 17:45
egor23
спасибо. до этого только с винраром и 7з работал - там сразу редактировать можно.
Автор: A19EXXX
Дата сообщения: 06.11.2009 21:09
Bulat_Ziganshin, можно ли к FreeArc_Example прикрутить запрос 2-го диска?? (любые способы, кроме загонки архивов в исталл....). Поиском не нашёл (ни здесь, ни в теме Inno )
Автор: milwaukeeman
Дата сообщения: 07.11.2009 20:23
Привет всем как в [more=этом]
[Setup]
AppName=Star Wars The Force Unleashed
AppVerName=Star Wars The Force Unleashed
DefaultDirName={pf}\Star Wars The Force Unleashed
Compression=none
WizardImageFile=C:\Users\ИЛ\Documents\ИГРЫ\Star Wars The Force Unleashed\{tmp}\6.bmp
WizardSmallImageFile=C:\Users\ИЛ\Documents\ИГРЫ\Star Wars The Force Unleashed\{tmp}\5.bmp
InternalCompressLevel=none
DefaultGroupName=Star Wars The Force Unleashed
UsePreviousGroup=false
AppendDefaultGroupName=false
OutputDir=C:\Users\ИЛ\Documents\ИГРЫ\Star Wars The Force Unleashed\Output
ShowLanguageDialog=auto
DiskSpanning=true
DiskSliceSize=2039026690
SlicesPerDisk=2
WindowVisible=true
SetupIconFile=C:\Users\ИЛ\Documents\ИГРЫ\Star Wars The Force Unleashed\{tmp}\icon.ico
LanguageDetectionMethod=locale

[Files]
Source: {tmp}\unarc.dll; DestDir: {tmp}; Flags: deleteafterinstall dontcopy
Source: {tmp}\InnoCallback.dll; DestDir: {tmp}; Flags: deleteafterinstall dontcopy
Source: {app}\*.*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: {src}\LevelPacks01.arc; DestDir: {app}; Flags: external dontcopy; BeforeInstall: PlsInsertNextDisk(2, 'LevelPacks02.arc')
Source: {src}\LevelPacks01.arc; DestDir: {app}; Flags: external dontcopy; AfterInstall: PlsInsertNextDisk(1, 'LevelPacks01.arc')



[Registry]
Root: HKLM; Subkey: SOFTWARE\Aspyr\Star Wars The Force Unleashed; ValueName: Path; ValueType: String; ValueData: {app}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; Subkey: SOFTWARE\Aspyr\Star Wars The Force Unleashed; ValueName: AppFile; ValueType: String; ValueData: {app}\SWTFU.exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; Subkey: SOFTWARE\Aspyr\Star Wars The Force Unleashed; ValueName: Language; ValueType: String; ValueData: en; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows\CurrentVersion\GameUX\GamesToFindOnWindowsUpgrade\{{90560474-1B1B-4FB3-814C-E31EFE46EF84}; ValueName: GDFBinaryPath; ValueType: String; ValueData: {app}\AWL_Release.dll; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows\CurrentVersion\GameUX\GamesToFindOnWindowsUpgrade\{{90560474-1B1B-4FB3-814C-E31EFE46EF84}; ValueName: GameInstallPath; ValueType: String; ValueData: {app}; Flags: uninsdeletevalue uninsdeletekeyifempty

[Tasks]
Name: directx; Description: Обновить Microsoft DirectX; Languages:
Name: vcredist; Description: Установить Microsoft Visual C++ 2005 Redist
Name: dotnetfx; Description: Установить Net Framework 3.5

[Run]
Filename: {src}\Support\dxwebsetup.exe; StatusMsg: Установка Microsoft DirectX; Flags: waituntilterminated; Parameters: /q; Tasks: directx
Filename: {src}\Support\CRT\vcredist_x86.exe; StatusMsg: Установка Microsoft Visual C++ 2005 Redist; Flags: waituntilterminated; Parameters: /q; Tasks: vcredist
Filename: {src}\Support\dotnetfx35.exe; StatusMsg: Установка Net Framework 3.5; Flags: waituntilterminated; Parameters: /quiet; Tasks: dotnetfx


[Icons]
Name: {group}\Star Wars The Force Unleashed; Filename: {app}\SWTFU.exe; WorkingDir: {app}
Name: {group}\{cm:UninstallProgram,Star Wars The Force Unleashed}; Filename: {uninstallexe}; WorkingDir: {app}
Name: {commondesktop}\Star Wars The Force Unleashed; Filename: {app}\SWTFU.exe; WorkingDir: {app}

[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl


[UninstallDelete]
Type: filesandordirs; Name: {app}

[CustomMessages]
eng.ArcBreak=Installation cancelled!
eng.ArcError=Decompression failed with error code %1
eng.ArcBroken=Archive <%1> is damaged or not enough free space.
eng.ArcFail=Decompression failed!
eng.ArcTitle=Extracting FreeArc archive...
eng.StatusInfo=Files: %1%2, progress %3%%, remaining time %4
eng.ArcInfo=archive: %1 из %2, size %3 of %5, %4%% processed
eng.ArcFinish=Unpacked archives: %1, received files: %2 [%3]
eng.taskbar=%1%%, %2 remains
eng.ending=ending
eng.hour=hours
eng.min=mins
eng.sec=secs
;
rus.ArcBreak=Установка прервана!
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcBroken=Возможно, архив <%1> повреждён или недостаточно места на диске назначения.
;rus.PassFail=Неверный пароль!
rus.ArcFail=Распаковка не завершена!
rus.ArcTitle=Распаковка FreeArc-архивов...
;rus.Szip=Распаковка 7zip-архивов...
rus.StatusInfo=файлов: %1%2, %3%% выполнено, осталось ждать %4
rus.ArcInfo=Архив %1 из %2, объём %3 из %5, %4%% обработано
rus.ArcFinish=Распаковано архивов: %1, получено файлов: %2 [%3]
eng.taskbar=%1%%, %2 remains
rus.taskbar=%1%%, жди %2
rus.ending=завершение
rus.hour=часов
rus.min=мин
rus.sec=сек

[Messages]
BeveledLabel=RePack=by=Milwauke-Man

[Code]
const
Archives = '{src}\*.arc'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

procedure PlsInsertNextDisk(num: integer; CheckedFile: string);
var Capt:string;
begin
if not FileExists(ExpandConstant('{src}\') + CheckedFile) then begin
Capt:='Пожалуйста, вставьте диск %n, содержащий файл %f и нажмите ОК для продолжения установки.';
StringChange(Capt, '%n', inttostr(num));
StringChange(Capt, '%f', ExtractFileName(CheckedFile));
MsgBox(Capt, mbInformation, MB_OK);
PlsInsertNextDisk(num, CheckedFile);
end;
end;


// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;

// стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;[/more]скрипте реализовать запрос 2го dvd5 при установке?
Автор: 4kusNick
Дата сообщения: 07.11.2009 23:10
milwaukeeman
Может, стоит спросить в соответствующей ветке?
Автор: Mr_VoLT
Дата сообщения: 08.11.2009 00:29
Не могу скомпилировать ... всё как в инструкции
потом получаю

Код: "t" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
Автор: Bulat_Ziganshin
Дата сообщения: 08.11.2009 09:08

Цитата:
gcc: Unarc/gui/icon.o: No such file or directory

сначала сделай make в каталоге unarc

Добавлено:

Цитата:
Привет, я вот репак сделал у меня он нормально устанавливается (моя винда win7_x64), для распаковки требуется 1гб, так вот у меня парень его скачал, у него на винте свободно 12 гб (игра для установки требует 7 гб, прекомпом не жал) и у него не хватает места на жестком диске т.е распаковка то идет, но сначала копируется архив в темп, а потом его извлечение


да, есть такая проблема. как она возникает - описано в заголовке темы (Почему для использования 2+ гб памяти желательно установить 64-битную версию Windows). у меня сейчас идёт слишком жёсткая проверка свободной памяти, я её сделаю поумнее и выпущу новую версию скрипта в которой этой проблемы не будет
Автор: DemonAk
Дата сообщения: 08.11.2009 11:03

Цитата:
да, есть такая проблема. как она возникает - описано в заголовке темы (Почему для использования 2+ гб памяти желательно установить 64-битную версию Windows). у меня сейчас идёт слишком жёсткая проверка свободной памяти, я её сделаю поумнее и выпущу новую версию скрипта в которой этой проблемы не будет

Понятно спасибо за разъяснение, а то я уже волноваться начал), щас еще повнимательней почитаю шапку.
Автор: AngelDead
Дата сообщения: 08.11.2009 11:30
Блин покопался в теме с преомп, нашел только это -m=precomp04+rep:2047m+lzma:256,
мне бы что бы было допустим -m=precomp04 + -mx -ld=768m, но если так поставить архив не собирается.
Автор: Bulat_Ziganshin
Дата сообщения: 08.11.2009 12:29
счас порылся на тру, обнаружил что в некоторых инсталяторах игр уже прямо пишут "устанавливается на компьютерах с любым объёмом озу". до чего я народ довёл ))

Добавлено:

Цитата:
-mx -ld=768m, но если так поставить архив не собирается.

-max -ld=768m и всё. нужен ноябрьский 0.60
Автор: newden
Дата сообщения: 08.11.2009 12:58
ПРи запаковке архива часто вылазит ошибка запаковки чтот про невозможность записи и свободного места. Места то валом...ограничений в правах нет. Заметил при этом пропадает временный файл архива. Происходит на большом обьеме (4GB) и большом количестве файлов. Запаковал эту папку двумя архивами....все норм. Но неудобно ппц. Может кто подскажет куда копать?
Автор: Bulat_Ziganshin
Дата сообщения: 08.11.2009 15:21
newden
в Settings настраивается папка для временных файлов

Добавлено:
DemonAk
сделал - http://freearc.org/download/testing/unarc-Nov8.zip

напиши как работает
Автор: juvaforza
Дата сообщения: 08.11.2009 15:59
А кто это добавил последний вопрос в MiniFAQ?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Opera (часть 14)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.