Версия 0.20 была переписана с нуля с целью достижения следующих целей: - надёжная обработка ошибок - разбиение сложных задач на отдельные взаимодействующие треды - тотальное комментирование исходников на русском языке - экономное потребление памяти - увеличение гибкости работы программы для создания томов, storing'а если сжатие не удалось, мультипроцессорности и т.д. - изменение структуры архива и каталога файлов - создание возможности для добавления шифрования, восстановления данных, хранения поколений файлов, соединения алгоритмов сжатия и т.д. 0.20 15.01.05 Hugs-совместимая версия без сжатия. 0.21 5.02.05 PPMD, LZMA, LZP; -m1..-m6x, -t, -kb, CRC, восстановление времени/даты 0.22 19.02.05 GRZip, BCJ-x86, -js, сложный декодер -m, full RE in filenames, последняя версия для GHC 6.2.1 0.23 26.04.05 GHC 6.4, FAR plugin, -tl/-tk, arc.ini, %FREEARC, -cfg-, -o, -y, русские имена, экономный read-ahead, HEADER BLOCK 0.24 16.12.05 Compression Library, Extractor, SFX; y/c/cw/k/s/-z/-k/-sfx; --Limit*Mem; Unicode, >4gb, 300 bytes/file 0.25 1.11.06 lzma 4.43, smart update of solid blocks 0.30 15.11.06 dict, ppmonstr; --display, --logfile 0.31 18.11.06 новый LZP; новый парсер -m: m1x..m7, -m4b/3t, dict+lzp+ppmd/pmm, lzp+lzma; [Compression methods], --print-config 0.32 06.12.06 Первая публичная версия (прорекламированная с dict) 0.33 10.12.06 -dsgecpn; написан раздел документации "Конфиг-файл arc.ini" 0.35 09.01.07 REP: заменил lzp в сжатии бинарных файлов 0.36 22.02.07 r/rr, -ac/-ao, m[f], -d[f], -t/-pt, -w, -lc/-ld и куча мелких усовершенствований 0.40 01.01.08 MM, tornado, delta, lzma -mt, ext.compressors, tempfile; encryption, unix version, http+recovery, -sc/far/tc, ^Break, warn/error/fail->logfile+stderr+exitCode, -cfg/-env, -n/-ta/../-sl/-sm === История изменений в FreeArc 0.50 ============================================================== Сжатие: filetype detection!!! GUI!!! запросы комментария архива, паролей шифрования/дешифрования. 25.12.2007 File Manager!!! ИНТЕРНЕТ! удаление файлов сначала нужно закрыть архив запрос на подтверждение удаления; проверить selected>[] убрать файлы с экрана тоже количество и размер выбранных файлов внизу выход наверх и в корень enter in dialogs enter для входа в архив/каталог использовать только один диалог прогресса для всех операций и убирать его с экрана при отсутствии работы очередь операций удаление из архива файлов с русскими именами (отключить codepage conversion при обработке команд, сформированных нами самими) GUI запрос перезаписи файла обновлять раз в 0.5 секунды всё, кроме progressBarSetFraction (результат - накладные расходы на GUI на моём duron-1200 снизились до ~7%) Сжатие: filetype detection Улучшено обнаружение типов файлов, проблемы остались только с Ruby Не используется для файлов, которые в arc.groups занесены в нестандартные группы ($iso, $precomp и т.д.) файл типа $jpg будет детектиться как имеющий тип "", поскольку группы $jpg нет в алгоритме сжатия по умолчанию 8.01.2008 File Manager больше не откидывается после выполнения нескольких операций тестирование/распаковка всех выбранных архивов диалог распаковки "Extract a.cpp/files/5 files from a.arc/5 archives" Ошибки -mrep:1200m - выводится "memory used 1gb", а должен "1500mb" - слишком сильное округление! суммарный объём памяти цепочки алгоритмов должен быть Integer Ошибки, возникающие в алгоритмах (рас)паковки, наконец-то ясно рапортуются. "Arc.exe a a -di -lc- -ld- -m9b": "ERROR: runArchiveCreate:results undefined" rep:2047m (слишком сильное ограничение размера словаря на уровне солид-блока) "-m=ppmd:1536m:" - вылет из-за двоеточия в конце! TRUE/FALSE may be defined by other libs lzma: разрешить любой размер словаря, влезающий в 4гб памяти lzma:ultra=lzma:max -lcN% ограничивает алгоритм не только объёмом физической памяти, но и объёмом свободной вирт. памяти (в частности, по умолчанию используется не более 3/4 свободной вирт. памяти) Кроме того, объёмы выделяемой памяти ограничиваются объёмом свободного адресного пространства процесса минус 1мб rep - используется хеш 256 мб до rep:1536m; точно выводится объём используемой памяти lzp - проверяются ошибки выделения памяти и корректно вычисляется/ограничивается объём используемой памяти -m3x: исключить delta для text/bmp 10.01.2008 GUI: Overwrite dialog - full info about both files File Manager архивы с русскими именами, русские имена каталогов диалог распаковки выбор выходного каталога и история каталогов фрейм вокруг опций перезаписи галочка "добавить имя архива к пути распаковки" windowPresent to switch to main window after Extract window has been closed ускорить переходы - обновлять данные в модели вместо её переназначения. запрос подтверждения при нажатии на крестик в диалоге прогресса сохраняем записи истории на диск; записываем/читаем их при каждой операции (чтобы обеспечить защиту от сбоев/сделать историю глобальной для всех запущенных копий WinArc) при выходе наверх ставим курсор на каталог/архив из которого мы только что вышли Select/Unselect/Refresh комбобокс над списком для навигации по структуре диска/архива диалог прогресса очищается перед выполнением следующей команды каталоги в архиве (140 секунд и 260 мб на открытие архива с 350 тыс. файлов) "additional options" with history in add/extract/... dialogs ArcInfo - информация об архиве add/modify/join commands вход в зашифрованные архивы если пароль/файлключ настроены в Расшифровке default arcname/outpath Settings dialog: локализация: файлы локализации в каталоге arc.languages в UTF-8, импорт из 7-zip logfile ассоциирование WinArc с .arc файлами lzma перед вычислением hs округлять dictsize до *ближайшей* степени двойки правильно *выводится* объём используемой памяти выделять память для словаря в конце выделять отдельно hash и son, причём сначала son (normalize) Менеджмент памяти: на автомате используется до 75% от физ. памяти, но в пределах размера наибольшего непрерывного свободного блока памяти минус 5 мб, . при этом распаковка ограничена 1 гб памяти (-lc75% -ld1gb). . При -lc- -ld- все проверки отключаются. Поэтому lzma/rep с макс. настройками (lzma:255m, lzma:fast:511m, rep:2047m) доступны только с "-lc- -ld-" Dict возвращает dmem=1mb, хотя это и не совсем правда ;) . RegExp: ускорено сопоставление с шаблонами . -s: по умолчанию создаются солид-блоки неограниченного размера (раньше было 1 гб) . Опция --archive-comment позволяет ввести комментарий к архиву напрямую в командной строке . ~/.FreeArc used by default for storing winarc.ini/winarc.history Команды l/v выводят '*' перед именем файла если он зашифрован Команда v выводит сжатый размер файла, l/v выводят суммарный сжатый размер файлов в архиве 28.01.2008 . Filetype detection: сосредоточено на выявлении $text и $compressed (для -m2..-m4) файлов отключается в -m1 и при использовании явного метода сжатия (в общем случае - при отсутствии $text и $compressed в списке типов файлов - нафига оно при этом нужно? :) -ma+, -ma-, -ma0..9 - включение/выключение/уровень автодетекта File Manager Compression/encryption profiles in Add&Settings dialogs Significantly improved Add dialog tooltips: N+1000 Localization of names for standard profiles rr+, rr0.1%, rr0.01% 8.02.2008 . Научили понимать кнопку BackSpace для возврата на уровень выше В 1.7 раза ускорено сжатие текстов в -m3: -m3$text=dict:p+lzp:32m:24:h20+grzip:m3:l Улучшено определение типов файлов (3 эвристики + рекурсия) lzp в -m5t..-m9t: увеличен словарь tor:9-11 - cycled MF & large 2/3 hash updated at each step ускорен lz в filetype detection (45mb/s) tor:2-3 - faster by 10% due to disabling of MM tables . Lua scripting! . Сжатие бинарных файлов в -m3 на 10% быстрее и на 1% лучше (словарь 32 мб благодаря ht4 match finder) Исправлено: wfindfirst на пустых дисках . -di+% для вывода на экран статистики по памяти (соотв-но, -di+$# её больше не выводят) . lzma по умолчанию = lzma:64m:ht4 . -m4 вместо rep:64m+lzma:8m:bt4 теперь использует lzma:64m:ht4:mc16 (аналогично изменению в -m3) . в lzma добавлен параметр :h, позволяющий изменять размер хеша (для ht4, по умолчанию dict/2) или заголовка хеша (для hc4/bt4, по умолчанию dict*2). изменением этого параметра можно ускорить поиск или наоборот, чуть уменьшить требования к памяти lzma:ht4 позволяет использовать словарь до 1гб! fixed: LZMA: p->SetDictionary в parse означает, что мы можем изменить размер словаря при распаковке! 15.05.2008 Добавлена иконка к .arc файлам --При чтении оглавления архива пропускает опциональные доп. поля и ругается на обязательные Изменён формат хранения комментария архива (UTF-8 вместо UCS-4) с поддержкой чтения старых комментариев GUI: комбобокс сообщений и warnings внизу окна lzma:*ht7 - игнорировать параметры начинающиеся со звёздочки CHECK -> printf/msgbox (utf8->utf8/utf16/oem) . SFX!!! не запускать след. алгоритм до появления вывода от предыдущего команда s-/sSFX_MODULE/s sfx- ком. строка - -dp/-o+/-o- русские имена файлов в архиве (mkdir/BuildPathTo/exists/displayname with unicode names) RTF в комментарии linux: lzma -mt, sfx/unarc (todo: files >4gb) filetype detection: try mm first for $wav/$bmp (to do: header checking for 6*24/small files?) fast exit when updated archive is locked / any input archive is corrupt Fixed bug in Tornado: incompatibility with old -m1 method! Installers with and without GTK 3.06.2008 Win32: память выделяется с MEM_TOP_DOWN, что позволяет избежать проблемы фрагментирования REP: выделение буферов вынесено из цикла чтобы избежать фрагментации памяти писать кусками по 8 мб даже если нет совпадений GUI при архивации каталога "FreeArc 0.50" предлагает имя архива "FreeArc 0.50.arc" sorting of language files (important only for linux) display real name of archive tested by -t messages: found N files, sorting filelist, analyzed N files... в infobox показывается имя архива без каталога ограничена ширина диалога Add; отключено автоматическое увеличение главного окна запоминание размеров и положения главного окна "Extract here" в контекстном меню .arc; "FreeArc archive" added to Explorer "New" menu Выбор юникодных файлов/каталогов через диалог Select Вывод юникодных имён архивов в заголовке окна индикатора прогресса В заголовок окна добавлено время до конца выполнения команды Не учитывается время, проведённое в паузе и запросах (перезапись/пароль/комментарий) Unarc/SFX "All OK\n" при успешном окончаниии работы unarc/консольного sfx Вывод Help при ошибке в параметрах виндовым SFX full support for Unicode arcname/outpath/filenames . use freearc.sfx instead of arc.sfx by default . опции sfx/winsfx a-la winrar Improved filetype detection: more chunks for large files; at least 92% of $text/$compressed to use it Installer: PATH updating, deleting of all FreeArc/Gtk files, включены Theme Changer и сами темы; readme -> readme+whatsnew ^Break->terminate при работе не в режиме файл-менеджера. Убраны зависания - direct exit tempfile удаляется из описания цепочки упаковки Исправлена ошибка в алгоритме Delta Теперь при распаковке по умолчанию используется -ld75% Исправлен freearc.addon (для Total Commander) - добавлена поддержка файлов с пробелами и sfx архивов FAR Plugin: added "Convert to SFX" command Linux: больше не требует ~/.FreeArc для работы; GUI: fixed archive navigation & Unicode filenames support (UTF-8 realpath) --Windows: конфиг-файлы также ищутся в каталоге пользователя "Application Data\FreeArc" . WinArc->FreeArc 23.06.2008 GUI Окно индикатора прогресса не растягивается при длинном filename processed; ProgressWindowSize в freearc.ini При операциях над существующими архивами (ch,d,x...) в ком. строку добавляется "--noarcext" "Abort operation?" - локализация и pause_timing Progress indicator now shows current compressed/total compressed sizes Сортировка нажатием на заголовок столбца Sorting by Modified now separates files and directories Сохранение размера/положения диалогов и порядка/ширины/сортировки столбцов в файлменеджере Language selected via compact table "Change drive" button Single-click on the empty space at right clears selection, double-click selects all files FAR-like Shift+ Shift- Ctrl+ Ctrl- Alt+ Alt- keys for marking files Увеличено количество команд в меню, реализована поддержка hot-keys Archive comment editing in ArcInfo dialog You can start to search file by starting type its name; *? wildcards are also supported Shortcut keys for menu commands Windows: native Open/Save dialogs Windows: locale-specific date/time format Support for used-defined menu/toolbar (just copy freearc.menu.example to freearc.menu and edit it as you wish) Large icons in toolbar Setting to disable captions in toolbar buttons Filters (*.arc;*.exe) in Open Archive/Select output archive dialogs Uses long command names in menu and short names in toolbar "New" language simplifies adding new translations "Check for updates" commands runs in background "Watch for new versions via Internet" checkbox in Settings dialog automatically checks for updates every day When checking for updates, UserID/Version/language/OS/RAM/maxblock/cores reported to freearc.org UserID is random number saved to config file and backuped to registry Run any program/document just by double-clicking (or Enter) on it Added "Create" button to outdir select dialog Disabled move-to-top for options like Compression, Encryption... (flagged by "*Last" tag in freearc.history) Added Recover Archive command Stage indicators with percents for RR operations (add, check, repair) with immediate stopping when user aborted operation Modified default compression/RR options Added Info page to Settings dialog, now displaying only Max free memblock Saves Maximized window state Compression tab: show speeds for 3GHz Core2Duo Improved freearc.history, i.e. predefined sets of options Added icon for Arc.exe and FreeArc.exe Skin changer: more skins Made toolbar buttons non-homogeneous GTK updated to version 2.16 Linux: "chmod +x" при создании sfx-архива, "chmod -x" при -sfx- --CHECK - в FreeArc приводит к вызову longjmp и возврату FREEARC_ERRCODE_GENERAL из процедуры (рас)паковки . Выбор кодировки: -sct для терминала; -sci для логфайла; -scf для имён файлов на диске (под Linux) . Windows: unicode (utf-16) cmdline Разделение на модули: Files => Charsets FAR/TC: копирование/перенос пустых каталогов в архив/из архива; исправлены плагины "-ms-": disable fast compression of already compressed files Initial CLS support (external compressors in cls-*.dll) . -m1xx..-m4xx modes provides very fast decompression (require 1gb of free memory to decompress!) Tornado 0.5: . better compression in -m1; faster -m3xt; modified -m1xx..-m4xx definitions; :t :ah :al tor:7:c1 .. tor:11:c3; support for :l not power of 2 checks at decoding in order to prevent segfaults; fixed one bug in decoder GRZip multithreading! Temporary: allow blocks up to 32 mb in order to improve -m2t performance Prints CPU time and Real time for operation Installer SFX (extracts into tempdir, runs setup.exe and then deletes extracted files) -m2b made faster on modern cpus; -m3b - fixed speed loss on multi-core cpus & 1% better compression "lt" command: technical archive listing 100% GUI translation and translation of error/warning messages in CLI --language=LANGFILE option: localization for console version! If present in arc.ini, it should point to the same file as freearc.ini -m2/-m3/-m4 now use 96mb dictionary by default! *r modes are removed, bcj moved after rep arc.ini: large 45kb variant with support of External Compressors PowerPack (De)compression speed improved by 10% by using facompress.dll -rr0.1%, -rr0.01% options support (translated to -rr0*4kb, -rr0*64kb) Set arc.exe and freearc.exe icons to FreeArc.ico External compressors/tempfile method: Checks I/O for errors Copies data intact when compression program returned non-zero error code Raises error when decompression program returned non-zero error code Prints size of data being processed as 64-bit point-delimited value: "1.234.567 bytes" and "Error level=x" after operation Ability to use spaces in [External compressor] header: [External compressor: ccm123, ccmx123, ccm125, ccmx125] . [External compressor: ccm, ccmx] packcmd=ppmonstr {-option } ... packcmd=ppmonstr {options} ... unpackcmd=thor e{option} ... default=-o10 -m48 Fixed bugs: In Delta filter (leading to crashes) Решены все проблемы с кодировками Showing "increase +RTS -Ksize" on multi-gigabyte files . Now it reports "Bad password" with errcode 21 when archive/file cannot be decrypted using supplied password Program was terminating when trying to detect filetype of locked file (such as pagefile.swp) -sfx --noarcext: не меняло расширения архива Logfile: hide passwords used in cmdline/cfgfile strip too long arguments and too long argument list down to 100 chars/elements Fixed error handling (it was always printed "Program terminated" instead of real error message) Filetype detection: it was failing on pure English texts Fixed bug in SetWindowTitle Commands ch/k/c/rr/s shouldn't have additional arguments Fixed RR add/check/recover execution Testing archive with recovery record ("undefined UI::ref_ui_state") Computing estimated time and speed takes into account duration of last stage rather than whole operation Unarc crashed on errors instead of displaying error message Unarc didn't deleted partially decompressed files TTA: crashed on recompressing WAV files Fixed GUI bugs: First file in directory was selected after any operation if nothing was selected before ArcInfo on empty.arc or non-archive was terminating program DoubleClick/Enter on non-archives was terminated program, but now executes them Freezing on chdir "c:" Freezing when going into archive with encrypted directory (вход в архивы с зашифрованным каталогом) Freezing after archive operation was cancelled/returned an error Lack of scrolling for archive comment Freezing on selecting two files and pressing Up ArcInfo: fixed calculation of number of files and directories in archive All dialogs are now modal Report to user and exit when we cannot open initial archive/directory Ensure single-threaded access to freearc.history Freezing when trying to open encrypted archives (password dialog should work in any thread) Freezing on Up from http://....arc Run directly from archive shown empty "directory" Some files were not shown when directory names contained space Extraction of all files with the same name as one file extracted from root dir of archive Use stock icons for Yes/No/OK/Cancel/Close buttons All toolbar buttons had the same width Some files inside archive were not shown when directory names contained space ("1C/", "1C 2/") 'Open Archive' button doesn't worked when you're currently in the root of any disk in filemanager When archive was converted to/from SFX, displayed archive name was not changed Encrypted.arc - Edit comment - Cancel -- resulted in program crash Removed hack that reversed column sort indicators due to bug in old GTK versions Linux: fixed warnings printed by Archive Open dialog aARC_VERSION = "0.51", aARCHIVE_VERSION = make4byte 0 0 5 1 === To-do list ==================================================================================== HCAR не закрывать программу по Exit если выполняется архивация загружать иконки для всех команд из png/ico файлов -ap FAR: -apdir1 + dir1/dir2/file in filelist (rar-style?) упаковка/распаковка пустых каталогов Поиск файлов на диске 1. проверить все не-regexp имена на предмет того, что это каталоги, ругаясь на ненайденные при отсутствии рекурсии (-r- или -r0); имя каталога означает сархивировать сам каталог и всё что внутри него 2. из оставшихся имён искать рекурсивно - все при -r - только regexp при -r0 - никого при -r- 3. нерекурсивный поиск не-regexp имён - использовать stat dir/ -> dir/* (a-la RAR) Не забыть соответственно изменить FileManager (addCmdFiles) Отбор и исключение целых каталогов: Stats, Stats/, Stats/*, Stats\*, -xStats... копирование пустых каталогов в/из архива; перенос непустых каталогов в архив (сам каталог не удаляется) arc l a dirname dirname/* => не выводит каталог dirname исключение из архивации целого каталога работает только в виде "-xhelp/*" -xКАТАЛОГ ? filetype detection: check for MM on large files Priorityio.doc bugs *Last в истории - локализуется после первого же использования update GUI docs sfx - поддержка и автоматическое использование метода tempfile dict bug: arc a aa cls.zip -mprecomp+6pt -t bcj+dict creates corrupted archives что будет, если упаковать на CD, т.е. файл лежит на диске на которой нельзя писать, или в папке, где запрешена запись arc a a d:\ - дубликаты файлов остались проблемы: удаление пустых каталогов из архива (TC), копирование пустых каталогов из архива (FAR), копирование в каталоги/из каталогов внутри архива (-ap) separate & no files selected "arc a a ../file" - не удаляется ".." из имени; аналогично при распаковке arc a dir/ - создаёт архив dir/.arc; нужно отсекать имена архивов кончающиеся на :/\ или содержащие : *.* и makefile.* должны включать makefile gui: так он должен папки выделять по *.* или нет? обновление архива, содержащего xxx: если не удалось открыть xxx с диска, то файл из архива исчезнет вообще tta: float32 badly compressed (vs wavpack), int32 isn't compressed at all +RTS -S - processed by arc.exe itself too :) запрещать все операци, приводящие к созданию невалидного sfx после "нет такого файла или каталога" (выбор из истории) - неправильное имя в поле path descript.ion for all files in package would be nice to see GUI использовать "arc:dir" вместо "arc/dir" чтобы не иметь проблем с разделением пути на архив и каталог в нём перевод tooltips: 1004 Englist text second line = Русский текст вторая строка (пустая строка в конце) перевод сообщений об ошибках (errormsg) и интернализация cmdline версии GRZip multithreading! ?fixing SyncQueue limiting memory -ilog a-la RAR (выключить поддержку Lua) arc.ini: нужна возможность указать non-solid mode для внешнего упаковщика GUI: центрировать индикатор прогресса относительно окна программы, а не всего экрана TC: при распаковке FreeArc.exe извлекается также no-url\FreeArc.exe arc x a FreeArc.exe - rar извлекает только один файл (*.exe извлекает все файлы) mm/tta/ppmd/lzp/dict: BigAlloc URL support: dynamic dlls in order to cutoff rep:1g errors testmem and correct method before starting single_compress (?? - параллельно работающим тредам компрессии может не хватить памяти) для полной реализации многопоточности нужно: сделать многопоточными все 11 алгоритмов. осталось всего 10 :) сделать так, чтобы отдельные солид-блоки могли сжиматься параллельно обеспечить буферизацию данных между алгоритмами сжатия (f.e. dict+lzp+grzip) NEW GUI: 1.1 сделать из freearc dll-ку 1.2 реализовать в ней возврат списка файлов в архиве с невыбранным ещё API 1.3 собственно (рас)паковка со всеми колбеками 2. ты начинаешь работать над gui и параллельно я работаю над добавлением поддержки 7z.dll обновление доки Filetype detection сосредоточено на выявлении $text и $compressed (для -m2..-m4) файлов отключается в -m1 и при использовании явного метода сжатия (в общем случае - при отсутствии $text и $compressed в списке типов файлов - нафига оно при этом нужно? :) -ma+, -ma-, -ma0..9 - включение/выключение/уровень автодетекта SFX use freearc.sfx instead of arc.sfx by default опции sfx/winsfx a-la winrar команда s-/sSFX_MODULE/s sfx- ком. строка - -dp/-o+/-o- русские имена файлов в архиве (mkdir/BuildPathTo/exists/displayname with unicode names) RTF в комментарии Installer External compressor options ({options}...) CLS описание того, как можно увеличить сжатие, увеличив или отменив ограничение -ld описание ht4 рус. документация (4gb) англ. документация (future plans) linux скриншоты File Manager показ татарских и прочих символов - рецепт Егора methodDescr - очищать при custom compr. mode каталоги в архиве refresh - перечитать архив closeFMArc перед переходом и перед refresh закрытие диалога прогресса не должно приводить к закрытию программы +terminated -> fail в extract +shutdown проверяет terminated и выдаёт Ctrl-Break +terminated -> fail в compress (завершать все треды распаковки) quasiread each 256kb in dict/rep/delta/lzp progress indicator: max(write, quasiwrite), min(read, quasiread) проблемы Please, Bulat, can be PPMonstr's output limited to one row? несколько паролей/keyfiles расшифровки "all ok" после каждой команды if you test an archiv, there is no message given back, there should be some kind of "Archive OK" at the end of the test использовать при вычислении cmem/dmem parseCmdline или по крайней мере полный код из неё при распаковке/тестировании архива без паролей они всё равно запрашиваются в диалоге команда "ch" должна применять переупаковку/перешифровку только к файлам, указанным в cmdline tatarcha: заголовок Add 1 file, Extract 1 archive.. добавлять tempfile в начало метода сжатия если не хватает памяти (ppmd:2gb перепаковка) Настройки: Профиль упаковки: можно сохранить, а удалить нельзя FreeArc не реагирует на закрыть из панели задач, когда открыто какое-нибудь окно, например настройки. Если открыто окно в FreeArc (например настройки), то при клике в панеле задач на FreeArc, основное окно FreeArc сворачивается, окно же настройки остаётся, при повторном клике, основное окно не разворачивается. ColumnOrder - убрать русификацию Maximized window - не запоминается нормальный размер Ручная реализация Ctrl-XCV чтобы работало даже в русском режиме Соображать какие изменения принесёт любая команда и отобрадать их заранее. Как пример: after 'Convert to SFX' inside archive Path field isn't updated When keyfile is "", pressing "..." opens root dir/program dir rather than current directory encrypted - enter - cancel - происходит запуск файла (нужна система явной типизации ошибок, с запуском только при "это не архив") Диалоги не наследуют свойство "Поверх всех окон" Снятие пароля с заголовков: -hp-- - сохранять зашифрованность каталога -hp- - снять шифрование -hpxx - включить шифрование an additional progressbar for big files, like in Winrar progress indicator - обновлять при копировании солид-блоков (archiveCopyData) DoubleClick->Run inside archive нет списка дисков на верхнем уровне, нет ".." ctrl-f4 - сортировка по расширению option 'Do not show hidden files and folders' (like in Explorer) Performance problems Оглавление архива: faster removeDups, keepOnlyFirstOn, buildTree медленное открытие/закрытие диалога Add (многократное чтение из history/запись в него) использовать массивы вместо списков файлов для нормального времени работы сохранение опций -m -s -ds в архиве в основном окне, рядом с кнопкой "сохранить", так и просится кнопка "обзор" выделять или insert'ом, или пробелом (winrar сбрасывает выделение только тех файлов, которые были отмечены мышью) tooltips: выводить tooltip не только на метке, но и на относящемуся к ней контролу: combobox, label... tooltips в диалоге прогресса с объяснением смысла каждого числа сливать arc.english.txt and locale для того, чтобы выводились англисйские tooltips при отсутствии наших диалог Settings "Restore standard profiles" button Date format selection Windows: [x] Associate FreeArc with .arc files [x] don't keep history Import 7-zip lang. file Recover, including "Original:" возможность сохранения чего-то типа "проекта" как в Nero, т.е. чтобы был список файлов + все настроики команды View, Queue/Apply; d&d support freearc a/x --dialog - открыть диалог добавления/распаковки (для Total Commander, например) формировать команду внизу диалогов распаковки/сжатия/модификации и выполнять её (так чтобы пользователь мог отредактировать) галочка "Detach operation" во всех диалогах операций, запускающая отдельную копию WinArc для выполнения операции! "Detach" FM button and appropriate syntax: "freearc c:\dir file1 file2 file3 /select file1" открывать лог-файл в начале работы программы диалог распаковки [x] включая подкаталоги закладка Selection: -ta/-tb/-tn/-to/-sl/-sm дерево/arcinfo/... слева unarc-based archive open (for arc.exe too) позволит обрабатывать большие архивы быстрее и используя меньше памяти ArcInfo: compression algorithms, created by FreeArc version xx, RR: "5*512 bytes", Диалог Cancel: Cancel file/solid block/archive/operation/group of operations/All отображение/ред-ние очереди операций в диалоге прогресса автоматическое обновление списка файлов каждую секунду/при обновлении каталога использовать уже открытый архив для ускорения выполнения операций view/test/extract linux: иной порядок кнопок в диалоге (HButtonBox?) добавление файлов compression settings dict/mem enable wav/bmp/text / rep/delta/exe... (all enabled by default) data protection test archive before operation [0..3] size of recovery record test archive after operation [0..3] place archive to the folder named as: current user, month, weekday, monthday include system/hidden files удаление файлов рекурсивное удаление для каталогов (упереть removeDirectoryRecursive) lzma разбить son на две части - сначала выделять макс. доступный блок, затем остаток регулирование размера хеша и sizeReserv CLZInWindow - уменьшать sizeReserv до dictSize/8 при BT и dict=81..95mb, 161..191mb, 321mb... lzma:32m:ht4 - если файл маленький, то при уменьшении словаря не уменьшать (а лучше даже увеличить) хеш-таблицу: 32m+16m -> 8m+32m (вплоть до 4*dictsize) то что сначала выделяется хеш, а затем 1.25*dict - это было сделано для старых matchfinders, где это обеспечивало выделение от больших блоков к меньшим. переделаю Сжатие -m3t = dict[:p?] + lzp:32m:32:h18:a + grzip:m3:l, где lzp:a - grzip-friendly модификация алгоритма (длины в тексте, а не в конце) с умножением для хешировани grzip: bwt-сортировка из dark lzp: p=HTable[k] - не выполнять при c!=LZP_MATCH_FLAG lzp: ускорить выч. хэша, пропускать по 4-8 байт когда долго ничего не находится (+tor) $bmp/$wav - group solid block by 64kb? для решения проблемы -ld1gb - выделять память небольшими блоками (при распаковке в lzma, rep, ppmd, tor) tor:5 -> delta+tor:5:t0 ? видимо, имеет смысл только на быстрых машинах Compressor: лучше всего для толстых алгоритмов использовать внешние компрессоры. уже сейчас можно взять compressor.exe и использовать его подобным образом. в будущем же compressor будет совместим по формату данных с внутренними алгоритмами так, что к примеру можно будет упаковать внешним lzma со словарём в 1 гиг, а распаковывать внутренним понятно, будут 32 и 64-разрядные версии, причём компилироваться они будут ICC, что увеличит скорость на 10-20% fa будет автоматом соображать хватит ли ему наличной памяти для выполнения операции или лучше отдать её на откуп внешней программе fa научится работать с внешними упаковщиками через stdin/stdout, что позволит использовать их так же удобно, как и внутренние алгоритмы - никакой записи на диск пормежуточных данных, актуальный индикатор прогресса и т.д. Ошибки -p=... - "=" может быть частью пароля. уточнить rep:SetCompressionMem; при ограничении lzma/rep можно использовать более точные значения словря (и уменьшать все порчие буфера, одновременно увеличивая глубину поиска) lzp:2200m - запретить словари >=2gb; ppmd:2560 - сравнивать с MAX_ORDER -ds:r - подтаскивать ближе файлы с различающимися расширениями тоже translate error messages for errors in arc.ini/cmdline в логфайл писать истинное имя arc/freearc.exe и заключать параметры с пробелом в кавычки checkingCtrlBreak в copy_data/eat_data rep:4gb == rep:0gb BigAlloc: smart alloc algorithm (alloc smallest block that's still enough for the data?) выполнять clearAll в uiStartArchive/uiDoneArchive приостанавливать инд. прогресса при вызове внешних программ SFX Жду - не дождусь, когда у GUI SFX модуля (под винду) будет ключик silent установки с возможностью задания пути по умолчанию, а также, как в WinRAR'е, фича запуска приложения после распаковки Инсталятор: вообще нужно, как в других инсталлах - перед распаковкой делаетеся проверка (тестирование), точнее даже сразу после запуска идёт проверка, а потом уже выполнение скрипта инталла. знать какой минимум памяти для распаковки нужен полезно, если памяти нужно больше 192мб или больше 3/4 физ. озу wopen: win95-совместимость? tempfile между слишком толстыми алгоритмами? Фичи -ver (rar-compatible) use fiGroup for sort -idp (+i2 - вывести имена всех сжимаемых файлов) разрешить external compressor создать целый каталог файлов и сжать их как обычные файлы // - комментарии в листфайлах "..." в листфайлах - так обычно записывают имена с пробелами availPhys - использовать для подбора размера read-ahead buffer в быстрых режимах; количества одновременно упаковываемых солид-блоков 768mb RAM -> rep:384mb:h128mb arc j 1 2 -apdir; j -d; j -ac arc x -tk1/2 (set to archive time/current time) При ошибке записи (нехватка места на диске?) выводить запрос к пользователю с возможностью Retry, что позволит ему освободить место перед продолжением работы Exclude list: I'm thinking on a text-box in "add with options" where file filters could get entered, as well as on a global exclude filter list and finally on a folder based configuration (text file or registry). The filter should allow wildcards and maybe directories Lua предикат фильтрации упаковываемых файлов GUI окно сообщения об ошибке; подокно варнингов use processing time for speed/estimated time bytes - выводить сколько действительно обработано, без прибавления 10% на read вывод индикатора может сжирать всё время CPU Background - уменьшать приоритет, минимизировать в трей тестирование архива с RR - вылет! "ERROR: undefined CUI::ref_ui_state" checkbox "Close on exit"; "Remaining time", "Estimated endtime" объём озу, используемый текущим алгоритмом учитывать, что cbytes может отставать от b (индейская хитрость!) добавлять в UI_Read/num=0 имя читаемого файла (или завести отдельную очередь), что позволит точнее отображать processed files/current file в CUI и GUI поддержка -m5p (external compressors) Хотелось бы ещё увидеть: 4. Изменение приоритета. 5. Дополнительные действия после окончания упаковки (Выключить\Перегрузить\Спящий\Ждущий режим\...) 6. Если цепочка последовательно выполняется, то наверно нужно отдельную статистику отображать... А ещё: 1. Интерфейс: 1.1. Добавление файлов как в WinRK, т.е. возможность накидывать, но в FreeArc с возможностью выбора каким методом паковать. Возможно сделать деление файлов на группы - перетаскиванием на иконку или область например txt\binary\.. 1.2. Возможность выбора каким интерфейсом пользоваться, у всех разные предпочтения, кому-то WinRAR подавай и т.п. 2. Интеграция с Explorer - чтобы была возможность выбора названия пункта в контекстном меню - или при установке или в настройках программы. "-psome password" в arc.ini (опции с пробелами в кавычках) '-ba' -> '-ra': поиск исправных дескрипторов Защита и восстановление архивов (команды 'r/rr', опция '-rr') если RR нет/сбойная, то загружать её с указанного URL и затем восстанавливать с её помощью Ошибки: real-time индикатор прогресса при распаковке - 90% от объёма исходных данных + 10% от выходных + количество файлов русские буквы в пароле, вводимом с клавиатуры/в диалоге? getFileInfo: attr=0; это означает, что их невозможно запоминать в архиве "-sc": utf-32, bom в unParseFile, распознавание le/be в parseFile, терминал/логфайл unc names "arc a a c:* -ep3"; "arc a a -m1 \* -ep3" unixify long option names (keep old names for compatibility?) External: удаление временных файлов при ^Break dict: уменьшить время init (1/15 sec) для небольших файлов? 0.41a: обновить доку и перевести её на английский Опции в конфигурации методов сжатия: jpg=-s- m0=-ds m5=-s64m -s=8m..2g для -m1..m9, mm- $jpg too? 4gb: http://msdn2.microsoft.com/en-us/library/aa366521.aspx ccm in pipe mode 0.41a: Encryption: ch - реализовать дешифрование+шифрование при копировании блока в ArcCreate скорость чтения при тестировании архива - всего 10мб/с (see Stats/read10mbs) 0.35->0.36, буферизация? -m2: 5% запись на диск, 3% ускорение CRC, 10% kadach MF, 7% huffman (-0.3% compression), 10% use repdist for MM detection 0.41a: External: создавать свои файлы в уникальных подкаталогах каталога TEMP проверка кода возврата of external compressors? Encryption: -p- - дешифровать (-p-- - оставить как есть) ? -p? -hp? - два отд. пароля? перенос в начало списка keyfile/пароля при успешной расшифровке reuse previous salt values выводить предупреждение при наличии в архиве файлов, сжатых с другим паролем подбирать numIterations в соответствии с производительностью машины так, чтобы генерация ключа требовала 0.1 сек Unix: MidnightCommander VFS support GetMaxMemToAlloc(LargestMemoryBlock) / GetAvailablePhysicalMemory symlinks, file owner/group/permissions, syslog instead of logfile?, OS signals handling SetConsoleTitle (tigetstr/putp), setpriority (PRIO_PROCESS, 0, xxx) or nice (+-xxx) Windows поддержка сохранения/восстановления аттрибутов, прав доступа (ОЧЕНЬ ВАЖНО), времени файлов, symbolic links Защита и восстановление архивов (команды 'r/rr', опция '-rr') разбивать на части с разными периодами добавить в сообщения о сбоях в архиве инфу о расположении сбойных данных команда 'r' может тестировать архив и печатать список сбойных солид-блоков Если есть посекторный CRC в архиве: 1. Сделайте распаковку архива с пропуском битых солид-блоков. 2. Сделайте распаковку битых солид-блоков до битого участка. Не хватает ручного восстановления по данным, выкачанным --save-bad-ranges "--original?" - files/description/ввод с клавиатуры FAR plugin: smarter Encrypted detection (:s:v), GetDecompressionMem - прилинковать все модули в режиме FREEARC_INFORMATION_ONLY "rn" command, --sync=-u -as, -dp*, -si[name[+size]]/-so, -ssc[-], -ssw, -r0 (Де)архивация миллионов файлов: тред поиска файлов и упаковка по 100к файлов; распаковка по одному DIRBLOCK за раз считывать списки файлов для -ac/-d из dirblocks хранить данные о файлах в ByteString - это позволит в 10 раз уменьшить требования к ОЗУ Индикатор прогресса продвигаться при работе препроцессоров dict/lzp и многошаговых алгоритмов (dict, grzip) 10%/n для каждого компрессора в списке кроме последнего не учитывать каталоги/пустые файлы, поскольку они сжимаются мгновенно quasiwrite4rep: -50kb read, 250kb quasiwrite read -50kb write 250kb read 0 write -250kb write .... read 50kb - before the next read operation Использовать словарь до 48/96 мб для -m3/-m4, в зависимости от объёма свободной памяти -lc = max(memory required for decompression, FreeMem()) :mc - увеличивать/уменьшать автоматически при увеличении/ограничении памяти ppmd/pmm:o - увеличивать/уменьшать автоматически при увеличении/ограничении памяти Увеличить read-ahead buffer для быстрых режимов сжатия (m1/m2/m3?); async write -{m3,m4,m5,m6}, -m{3,4,5,6} -m1=... (a-la 7-zip) "arc command/option" to get help on this command/option [External compressor:ccm] Указание объёма памяти для каждого набора опций по умолчанию, что позволит подбирать режим сжатия, подходящий для данного объёма ОЗУ: default_options:256m=5 default_options:384m/128m=6x mem=:m*mb New ideas: numopt = o numopts = --fastest --fast --normal --good --best memopt = m memopt:mb = m packcmd:stdio = ... packcmd:stdin = ... packcmd:stdout = ... "durilca e -m256 -o12 -t2" would become "durilca:256m:12:t2" ofr:1 => ofr:fastest, ofr:5 => ofr:best Compressor-in-a-dll: fac-lzma.dll, fac-ppmd.dll... on-demand autoloading from Internet with digital signature Открыть сто файлов, затем их все прочитать/записать, затем все закрыть и перейти к след. порции! ускорить распаковку множества мелких файлов (добавить отдельный поток, работающий с файлами) --crconly 100 files/sec: Compressed 144.557 files. Compression time Total 1414.34 secs Основные улучшения в 0.42 Сжатие lpaq/ppmm utf8/16 to codepage switching converter (for text and binary files) bcj2 (в rep?), disasm bcj/bcj2 в REP, устранить причины уменьшения сжатия при его использовании (repeat перекрывает близкую строчку) REP: несколько выходных потоков, встроенный bcj/bcj2/disasm ? встроить exe-препроцессор в REP (который имеет доступ к истинным адресам команд CALL), что позволит не делать exe-препроцессинг на повторяющихся фрагментах, как это делается сейчас bmp compression (CALIC/SLPRICE/JPEG-LS/BMF) xml-wrt & Grabowsky tricks in dict сегментирование по структуре *.exe, *.doc сжимать выход tta/mm логарифмическим кодированием и отдать логарифмы grzip/ppmd/lzma автоперебор параметров сжатия (в частности, ppmd order) Значительно можно улучшить степень сжатия, если в архиватор заложить механизм распознавания типов файлов. Бинарник - значит жмём так-то, веб-страница - значит так, лог - меняем параметры и т.д. использовать ICC для компиляции CompressionLib в DLL (http://www.haskell.org/haskellwiki/FFI_cook_book) ускорить dict, lzp, добавить свои MF в lzma; dict для бинарных файлов? one-file preprocessors: exe, precomp, mm, jpg async -m1 mode Multi-volume: при выходе записываемых данных за границы размера тома 1. создать описание солид-блока с имеющимся списком файлов 2. сформировать и упаковать в озу блок каталога с дескриптором (общая длина - N) 3. заменить в архиве последние N байт на каталог 4. открыть новый том и сбросить в него N байт, не поместившиеся в предыдущий 5. продолжить процесс упаковки продумать взаимодействие с записью Recovery Record распаковка нескольких томов Warnings warnings перезаписываются. убрать пустую строку перед warning'ом, добавить пробелы если есть индикатор прогресса построчная запись и номер процесса в логфайле после запроса к пользователю не нужно ещё раз переходить на новую строку arccomment - тоже неправильный перевод строки lzma: fastest, fast, normal, max, ultra; dict:p - выводить на экран в том же виде Основные улучшения в 0.43 -u=new.arc, -mt for -m2/-m3 mm: YFrFb, YC0Cg and so on *.zip и в $compressed, и в $precomp ? "$precomp $compressed\n*.zip..." сбор статистики о файлах с незнакомыми расширениями для выбора алгоритма сжатия. mmdet для $wav/$bmp mmdet: порверять избыточность rle+ari модели вместо чистой order-0? Awe: автоматическое переименование разархивируемых файлов, если в текущем каталоге уже имеются файлы с таким же названием (ключ -or в rar). В 7zip есть возможность создавать т.н. "incremental backup", было бы здорово встроить нечто похожее во FreeArc. То есть, новые/обновившиеся файлы пишутся не в "старый" архив, а в новый отдельный файл. Incremental backups. FreeArc takes as parameters an archive and a set of files and creates a new archive with new / changed files and a reference to the previous archive for the rest. Something like DAR. опция "имя выходного архива" опция "виртуальные входные архивы" - при 'u' добавляются только файлы, которых в них нет учитывать все входные и выходные архивы при исключении из списка архивации самого архива (overwrite_f) Rename[Extracted/Existing] / AutoRename[Extracted/Existing][Unicode/Latin1] / Help Выводить arccomment при ВСЕХ операциях (включая 'r' и 'cw') сделать опцию "расширенные маски" для использования [] в масках файлов compressionLimitMemoryUsage и calcMem содержат особые случаи для DICT и прочих алгоритмов, что может быть неверно при изменениях в них и при расчёте памяти для распаковки (compressionLimitMemoryUsage freearcGetDecompressionMem) Обработка ошибок все операции с файлами должны содержать "catch registerError" правильные коды возврата в rep/dict/lzp/... адеквантно отрабатывать обнаружение ошибок CRC option "turn warnings into errors" - вылетать при первом же warning "m1$rgb = " означает отменить последующие строчки "m1$rgb = ..." compression methods help? ? m2xb: tor:l4:x:h16m:d8m:p2:s - в отличие от -m2b меньше буфер и больше хеш Защита и восстановление архивов (команды 'r/rr', опция '-rr') восстановление непоследовательных сбойных секторов sectors/1.5 - ищем меньшее простое число - sectors/4.5 - снова ищем - ... 1. Определяем, какие из запорченных секторов секторы восстановимы с использованием каждой recovery record (не восстанавливать один сектор дважды!) 2. Восстанавливаем их, попутно корректируя другие recovery records 3. Вычёркиваем их из списка испорченых и повторяем процесс пока список не опустеет или ни один сектор не может быть больше восстановлен поиск блоков recovery чтение/запись по 256 кб разобраться с двойным footer блоком огромные архивы - найти более эффективные решения (несколько recovery блоков?) ещё лучше продумать вопросы надёжности при сбоях в конце архива разбить данные на куски, скажем 3.5 кб recovery sectors + 500 байт CRC секторов + 12 bytes self-descriptor + CRC распределить recovery records равномерно по архиву (между солид-блоками) правильное упорядочение при обновлении архивов (key_func для 'c'/'i') benchmarking command разобраться с использованием памяти, уточнить LimitMem, LimitBlockSize (=размеру блока данных) и тому подобные штучки limitDict должен ограничивать словарь первого метода и +100 для последующих методов в цепочке.. делать предварительный тюнинг метода сжатия и определять размер read-ahead кеша после составления списка упаковываемых файлов. Собрать в Compress.hs код для тюнинга методов сжатия/размера кеша из всех четырёх мест - Cmdline/arcCreate/splitIntoSolidBlocks/createSolivBlock если архивируются файлы только одного типа, то убрать из выводимого списка методов сжатия все остальные методы -s64m должно означать: данные разбиваются на куски 64m и каталоги остаются при них (это сделает невозможным read-ahead?) Расширения формата архива сохранять в каждом служебном блоке (или его дескрипторе?) расстояние до предыдущего служебного блока - это значительно упростит восстановление архивов хранить списки Int в формате 0/1/2/4/8, где 0 - нынешний формат с переменной длиной (записывать формат перед самим списком) антифайлы и антикаталоги доп. атрибуты (unix/win), 3 времени с высокой точностью сплит-файлы (в одном солид-блоке один кусок файла, в другом - второй и так далее) сплит-солид-блоки (для многотомных архивов) дескриптор блока - хранить в начале его длину, это упростит восстановление архивов и позволит в будущем расширять его новыми возможностями, в частностями ключом для расшифровки/проверки AV самого блока имя атрибута (String) + size + general attributes (COPY/OMIT/STOP+PERFILE/ONCE) + type (Number/String/Bytes) + representation type (0/1/2/4/8 для целых, S для строк, B для битов) + default value для COPY атрибутов расширить сигнатуру архива до 8 байт, которые должны быть в самом начале и самом конце архива FreeArc 0.80 - переработка методов сжатия: перед параметрами алгоритма сжатия, которые не влияют на распаковку, писать "*": lzma:8m:*h32m:*ht4 LZP: два выходных потока, sliding window, caching MF, multiply hashing, 2 entries? hash = lohi(word*123456789), где lohi складывает старшую и младшую часть 64-разрядного слова старшие биты в хеш-таблице хранят биты хеша чтобы не лезть зря в память при коллизии циклический буфер, выводить "словарь" перед данными, обрабатывать по одному мегабайту lzp для ppm* - плавное снижение MinLen по мере роста дистанции совпадения. препроцессинг для ppmd - уменьшить :h? h13 => h15 в окончательной программе? tempfile:8mb - буферизовать 8mb прежде чем начинать запись на диск external:80% ppmd:r0 означает фактически солид-блоки в данных ppmd. это надо использовать :) -s8m? dict/lzp: использовать минимум памяти при распаковке -m3=-m3r: lzp:h13, dict:p - равномерно распределить используемые символы rep:h32m (сейчас только rep:h23), автоматически использовать hash=dict/2 при отсутствии :h -m5$iso, -m.nrg.iso=m5$iso, -m.nrg.iso=$iso, -m.nrg.iso=lzma, -m$iso.nrg.iso, -m$iso:disk.iso пофайловые препроцессоры втч внешние пофайловый препроцессинг позволит включать exe и lib файлы в один солид-блок разные solid-настройки для разных типов файлов и уровней сжатия? Encrypt/Decrypt/Convert from zip Archive 'lt' - list technical automatically delete the archive files after successful extraction option to wipe files instead of deleting compression -mb для lzp/dict и других препроцессоров размер солид-блока должен соответствовать первому алгоритму в цепочке, если это dict или lzp с большим размером блока при этом объём требуемой для упаковки/распаковки памяти нужно считать как max, а не sum? размер солид-блока должен быть ограничением сверху (<=64mb), а не снизу, как сейчас joomla, IPB, smf - forumer для блочных алгоритмов (включая lzp-препроцессинг) полезно выбирать первый блок таким, чтобы он содержал как можно меньше файлов (для ускорения его чтения с диска) разбиение по подтипам файлов в splitBy (все примеры для солид-блока в 8 мб) 1. группа действительно должна обозначать номер группы (например, *hs - все в одной группе $$haskell) 2. если группа имеет как минимум 2 мб - пустить её отдельным солид-блоком 3. если группа больше - разбить её на солид-блоки ~6 mb, сгруппировав каталоги как можно более высокого уровня. 4. при чтении архива сортировать солид-группы по имени первого файла в каждой из них read_file: "чтение" файла, упакованного фейковым методом - нужно для обновления таких архивов вместо распаковки файла читать его с диска если файлы считаются одинаковыми (при -u, например), тем самым сэкономив время на распаковке tor: 101..104 EOB/ari huf/3 таблицы чтобы не терять скорости при +=10 to do: сохранение/восстановление атрибутов файлов, отбор по ним (а что делать в Unix'е?) store NTFS named streams комментарии к файлам, files.bbs оптимизация архива - копирование с "-m0 --recompress", затем с нужными опциями сжатия и сортировкой файлов внутри архива. аналогично - добавление в архив с оптимизацией Cmdline.hs - обрабатывать сначала общий конфиг-файл, затем личный, затем переменную среды FREEARC и наконец командную строку. Обрабатывать опции в порядке их приоритета (от общих к частным), в пределах одного приоритета - в порядке появления в командной строке ByteStream to-do "arc a ..\{} -m{3 4 5}" опция "сортировать список файлов в порядке их указания в командной строке/листфайлах" Intel-зависимости: ByteStream LZP от Димы Шкарина - 32-bit only! REP Улучшение сжатия: Фильтры: распаковка jpeg, deflate; exe-disasm вместо -ms: lzp - если сжатие как минимум на 10%, то дальше сжимать обычным алгоритмом, иначе - storing exe-фильтр зря тратит время (и ухудшает сжатие) на неисполняемых файлах bcj2: анализировать статистику по собранным смещениям прежде чем применять к ним вычитание bcj: поблочный (64кб) вывод с доп. байтом-флагом - применять ли bcj при распаковке? можно собрать все смещения из команд E8/E9 в конце блока lzp: разбивать блок на маленькие блоки по 64к и решать, упаковывать или нет, для каждого из них в отдельности perl - похоже на неоптимальный порядок сортировки импортировать новый ppmd ? lzma: _flushPos - скидывать данные и обновлять статистику каждые 256к, а не 8 мб :) dict: ускорить сжатие, улучшить работу с bwt/ppmd (использовать только ориг. символы или модифицированный 16-битный bwt/ppmd) и использовать в -m3 оптимизирующий проход может решить проблему сжатия бинарных файлов tta: signature, non-diff modes compression parameters in header of *each* block (что позволит изменять их от блока к блоку) rice & arith encoding, не сбрасывать таблицы кодирования перед следующим блоком Улучшение менеджмента сжатия: сбор статистики о файлах с незнакомыми расширениями для выбора алгоритма сжатия. запись этой информации в конфиг-файл пользователя. Поддержка BCJ2-подобных алгоритмов (улучшит LZP, REP, DICT, DELTA) Улучшение алгоритма выбора размера солид-блока с учётом больших файлов на границе условия >=0.5bs, <=1.5bs - сделать их строгими для и для GroupBySize, и для GroupByBlockSize при разбиении на solid-блоки учитывать "близость" файлов по типу/подтипу(C,Haskell,HTML...)/расширению/трём первым буквам имени/пути mNxb/mNxt - использовать разные настройки lzma для текстов и не-текстов? отбор по группам и подгруппам в ком. строке - "arc a a $text -x$$haskell" рефакторинг comressionLib - отделить тайминг от чистой (де)компрессии ввести универсальную функцию для запроса/установки параметров метода ДИЗАЙН ПОТОКА СЖАТИЯ: huftest проверка распределения вероятностей символов copy блоки с равномерным распределением - просто скопировать multimedia мультимедийные данные сжать спец-компрессорами lzp блоки с текстовым распределением обработать lzp lzma/ppmd? служ. информация. dict словарный алгоритм lzma/ppmd? словарь ppmd текст exe-filter блоки с нетекстовым распределением обработать BCJ2 (E8/E9) copy служ. информация. diff-filter обнаружение табличных данных copy (?) служ. информация. lzp lzp-препроцессинг lzma/ppmd? служ. информация. lzma основные данные ошибки: восстановление летних/зимних дат (распаковка зимой летнего архива) приводит к сдвигу на час (в том числе в Extractor) -s- не работает при большом кол-ве файлов проблемы: w95 file api support по умолчанию не сжимать hidden/system файлы (только с опцией -??) -r0: "arc a archive dir dir\*.* -r0" r0: Enable recurse subdirectories only for wildcard names мелкие недоделки: Улучшить использование hSetFileSize убивать decompression thread при сбоях в основных тредах? -ag - преобразовывать rar'овский формат в наш внутренний UTF8Z ускорить: (de)serialization, joinDirFilename Команда 'm' добавить warning при ошибке удаления файла? выводить имена всех удаляемых файлов при -i2? сортировка каталогов перед удалением? ByteStream problems: Compressor==[String] - плохо, поскольку он является экземпляром BufferData (восстановить write в archiveWriteDir) Compressor = String поддержка String в дичайшем виде; нужно использовать UTF8Z.hs отделить типы данных, используемые в программе, от кодирования, используемого в Directory pos::Addr#, CPS style for readUnchecked (10.43->8.98 (String w/o reverse))