Динамически загружаемая библиотека (Dynamic Link Library) UniPack.dll (отладочная версия 1.0.0.0) Авторские права (С) 2002 Буравцова Юрия. Все права защищены законом РФ "Об авторском и смежных с ним правах" Только некоммерческое использование. 0. Использованные при создании библиотеки программные средства: Microsoft Windows 98 SE, Borland Delphi 3 Client/Server, библиотека компонентов упаковки ZipTV версии 3.13 компании Microchip Data Systems. 1. Библиотека предназначена для использования в FTN-системе FIPS, разрабатываемой FIPS Russian Team. Назначение библиотеки - распаковка аркмейла, ноделистов и прочих архивов, созданных большинством известных архиваторов, а также упаковка аркмейла в архивы формата ZIP. 2. Типы распаковываемых архивов: ZIP, GZIP, BlackHole, ACE, ARJ, ARC, RAR, CAB, LHA, JAR, ZOO, TAR 3. Типы упаковываемых архивов: ZIP 4. Для распаковки архивов RAR необходима внешняя библиотека UnRAR.dll; CAB - Cabinet.dll; ACE - UnACE.dll. (Думаю, два последних типа архивов можно смело выкинуть - надобность в соответствующих библиотеках отпадет). 5. Форматы функций библиотеки UniPack.dll на языке Pascal: function UnPack(FileName, // Полное имя файла OutDir, // Выходной каталог (длинный или короткий) Pw, // Пароль; Используется, если необходим; Nil - без пароля FileListName, // Имя списка содержащихся файлов; Nil - если список не задан; // если задан - распаковка не производится FileMask, // Маска файлов; * - все файлы OnFileExist: PChar // Действия при наличии распаковываемых файлов: // O - переписать // N - у существующих изменять имя файла // E - у существующих изменять расширение файла ):Integer; stdcall external 'UniPack.dll'; function Pack(OutFileName, // Полное имя файла Pw, // Пароль; Используется, если необходим; Nil - без пароля ArchiveType, // Тип используемого архиватора: atZip - PkZip; FileListName, // Имя списка содержащихся файлов; Nil - если список не задан; // если задан - распаковка не производится FileMask: PChar // Полное имя архивируемых файлов (возможна маска) // либо их список; * - все файлы; имена файлов в списке // разделяются символом #1; в двойные кавычки не заключаются ): Integer; stdcall external 'UniPack.dll'; Метод вызова - STDCALL. Пример распаковки парольного архива "PackDll(290, Pw - tra-ta-ta).rar"; пароль - "tra-ta-ta"; выходной путь - 'F:\300Pw'; файл списка файлов отсутствует; маска распаковываемых файлов - *.pkt; если файл существует - изменить имя существующего: Result := WriteLn(UnPack ('PackDll(290, Pw - tra-ta-ta).rar', 'F:\300Pw', 'tra-ta-ta', nil, '*.pkt', 'n')); Пример упаковки архива "E:\_Asd\Archive.zip"; пароль - отсутствует, тип упаковщика - atZip, файл списка файлов отсутствует; упаковываемые файлы - D:\Qwa\*.bat, C:\Config.sys, C:\System.1st: Result := WriteLn(Pack ('E:\_Asd\Archive.zip', nil, 'atZip', nil, 'D:\Qwa\*.bat'#1'C:\Config.sys'#1'C:\System.1st')); Упаковка ZIP фиксирована методом Deflate; файлы упаковываются без сохранения директорий. Параметр ArchiveType в предлагаемой версии библиотеки принципиального значения не имеет - можно заменить на Nil. 6. Возвращаемые коды ошибок: 0 - ОК; 11 - Not enough memory; 12 - Data is bad; 13 - CRC error in archive data; 14 - Archive format unknown; 15 - Cannot open existing file; 16 - Cannot create file; 17 - Error closing file; 18 - Error reading from file; 19 - Error writing to file; 20 - Buffer too small; 21 - Function aborted by user; 22 - No files found; 23 - Password required; 24 - Function not supported; 7. Замеченный баг, теоретически исправимый (но, думаю, на этапе отладки в новом билде это малопринципиально ;) При распаковке парольных RAR-архивов, упакованных WinRAR 3.0 с максимальной компрессией и словарем 4096 байт, с использованием UnRAR.dll версии 3.0, распаковывается только первый файл в архиве с заявленной маской. 8. Размер исходной библиотеки - 438 784 байта. Исключение отдельных типов поддерживаемых архивов из кода мало сказывается на сокращении его размера - около 20-30 килобайт. 9. Разрешено к применению только в системе FIPS и только на условиях Freeware!!!