@PRODUCT_LONG @{r74}@{d}@{_} ВВЕДЕНИЕ Учитывая существующие потребности в средствах архивации данных, ARJ Software Russia выпускает собственную серию архиваторов, основанных на коде ARJ. С самого начала мы ставили своей целью сохранить функциональные возможности и совместимость с ARJ для DOS, но кроме этого, выпускаемые версии ориентированы на применение в таких приложениях и на таких платформах, где ARJ ранее никогда не существовал. НОВЫЕ ФУНКЦИОНАЛЬНЫЕ ВОЗМОЖНОСТИ И ОТЛИЧИЯ ОТ ИСХОДНОГО ARJ (обозначения: "-" - отсутствующие средства, "*" - функциональные различия, "+" - возможности, имеющиеся только в @PRODUCT) - Может наблюдаться существенное падение производительности при работе с архивами на устройствах без кеша с отложенной записью. * Используется способ хранения списка файлов, аналогичный ARJ/DOS, и для экономии памяти списки, насчитывающие более 3000 файлов, выносятся на диск. Чтобы хранить весь список в памяти, используйте ключ -hm65000. Это может оказаться полезным, если используется версия не для DOS, и свободной памяти достаточно для ведения списков - в таком случае объем занимаемой списками памяти не будет отрицательно влиять на производительность. * Программа-индикатор, ARJ$DISP, была переименована в ARJDISP. Если используются собственные модули, то их также необходимо переименовать. * Ключ "-t1g" эквивалентен сочетанию "-t1gf", которое требовалось в в исходной версии ARJ, но противоречило документации. * Все параметры, принимающие численные значения (как "-v" или "-2i"), позволяют указывать шестнадцатеричные числа с помощью префикса "0x", например, "-2i0x1000" (эквивалентно "-2i4096"). Помимо множителей 'K' и 'M' введен 'G' (гига-) и несколько зарезервированных: 'T' (тера-), 'P' (пета-) и 'E' (экза-). Все множители указывают десятичную степень, т.е. "-v1G" будет эквивалентен "-v1000000000" или "-v1000M". Данные изменения могут потребовать корректировки существующих настроек, поскольку два объединенных параметра ("-jd0x1") отныне могут не восприниматься как таковые ("-jd0", "-x1"). Это не относится к тем параметрам, где цифра выступает модификатором, ("-m4" или "-a1") и не задает каких-либо численных значений, поэтому описанная несовместимость не проявится в большинстве пользовательских конфигураций. * Файлы комментариев, задаваемые ключами "-jz" или "-z", вводятся в архив в исходном виде без принудительной замены последнего знака на символ перевода строки. + "ARJ a -d1" удаляет добавленные файлы без запроса подтверждения, аналогично "ARJ m". "ARJ a -d2" обнуляет файлы, не удаляя их, что часто имеет смысл для сохранения твердых ссылок. + Ключ "-_" позволяет преобразовывать имена файлов к нижнему регистру. При добавлении файлов в архив имена внутри архива приводятся к нижнему регистру, при распаковке преобразуются имена извлекаемых файлов. Проверка наличия дублирующих файлов в обеих случаях не производится. На файловых системах, чувствительных к регистру символов, ключ "-_" приведет к неработоспособности режима "-jt1". + С ключом "-h#" можно указывать собственный формат даты. Допустимы следующие спецификаторы: Y = год, M = месяц, D = день h = час, m = минута, s = секунда N = порядковый номер дня с 1 января текущего года (обратите внимание: учитывается регистр символов) Остальные символы считаются разделителями и не заменяются цифрами из даты. Также не изменяются символы, которые стоят на позициях, не предусмотренных форматом даты (4 знака для года, 2 знака для остальных чисел). Примеры: ARJ a project- -h#YYYYMMDD (project-19991022.arj) ARJ a backup- -h#MM-DD_hh-mm-ss (backup-10-22_23-57-16.arj) ARJ a specs -h#YY (specs99.arj) ARJ a test -h#YYYYYYYY (testYYYY1999.arj) ARJ a logs_ -h#NNN (logs_295.arj) + Ключ "-ha" можно также использовать при архивации файлов. В этом случае для архивируемых файлов с атрибутом "только для чтения" этот атрибут не будет проставляться в архиве, что полезно, например, при архивации содержимого компакт-диска. + По просьбам системных операторов сети FidoNet, в ARJ добавлен ключ "-2a", по своему действию похожий на "-jo", за исключением того, что вместо нумерации расширений изменяется имя файла. Рассмотрим это на примере файла "FILE995N.TXT". При извлечении из архива файла с таким же именем, новый файл будет назван "FILE9950.TXT", при последующем извлечении - "FILE9951.TXT", и так далее до "FILE9959.TXT", после чего следующий файл будет называться "FILE9960.TXT". После "FILE9999.TXT" ARJ перейдет к "FIL00000.TXT". Это позволяет иметь до 100000000 файлов, имена которых изначально совпадали. Данный ключ необходим для системных операторов FidoNet, где могут иметь место случаи с одноименными пакетами с почтой (ARCmail), прибывающими от разных систем. ПРИМЕЧАНИЯ: 1. Имеет смысл прописывать этот ключ в скрипт распаковки почты, а не в переменную окружения ARJ_SW. 2. В случае с файлом, названным 9999.XXX, все последующие операции будут производиться над файлом 0000.XXX, т.е. файлы с "9" в начале имеют меньше возможностей для дублирования. К счастью, такая ситуация маловероятна для FidoNet. 3. Существует аналогичный ключ, "-jo1", нумерующий имена файлов при распаковке, однако его действие отличается тем, что файловая система должна поддерживать длинные имена и, более того, он не подходит для ARCmail. + Ключ "-2d" обеспечивает режим совместимости с ARJ для DOS. В этом режиме формат заголовка соответствует исходной спецификации ARJ, кроме того, при распаковке в DOS не будет выдаваться предупреждение "двоичный файл из другой OС". Если указан ключ "-2d1", то используется модифицированный формат заголовка, а "MS-DOS" проставляется только в основной заголовок архива, таким образом, комментарий будет выводиться без искажений при просмотре архива в DOS. + Ключ "-2f" позволяет назначать комментарий только для первого тома в многотомных архивах, и удалять комментарий для всех последующих томов. + Ключ "-2i" аналогичен "-jx", но применяется к самому архиву, а не к хранящимся в нем файлам. Он позволяет пропустить заданное число байт в начале архива. Основными применениями этого ключа могут стать восстановление сильно поврежденных архивов и извлечение данных из ARJ-файлов на неструктурированных файловых системах. Ключ действителен только для первого архива, все последующие архивы (или тома) обрабатываются с "-2i0". + Ключ "-2k" задает двухзначный формат года при выводе дат в списках. Трехзначный формат, используемый для дат после 2100 г., действовать не будет, упрощая просмотр списка. "-2k1" устанавливает более удобочитаемый и информативный формат, в этом случае для дат с 1970 по 2069 гг. используется двухзначное представление, а для 2070 г. и последующих лет - трехзначное. Примеры: 15.07.1990 15.07.2040 15.07.2090 15.07.2103 по умолчанию: 90-07-15 40-07-15 90-07-15 103-07-15 -2k: 90-07-15 40-07-15 90-07-15 03-07-15 -2k1: 90-07-15 40-07-15 090-07-15 103-07-15 + Клюс "-2r" изменяет порядок архивации директорий, сохраняя в первую очередь атрибуты директории, а затем - хранящиеся в ней файлы. Этот порядок использовался по умолчанию в версиях ARJ до 2.76. Архивация с ключом "-2r" полезна в том случае, если архив планируется распаковывать более старой версией ARJ и необходимо избежать запросов на перезапись атрибутов директории. Если ключ "-2r" указан при распаковке, то ARJ будет всегда запрашивать разрешение на изменение атрибутов директории (по умолчанию этого не происходит). + Если отсутствует переменная окружения ARJ_SW, ARJ ищет файл ARJ.CFG в каталоге с программой. Данный файл имеет тот же формат, что и конфигурационные файлы, описанные в документации. Если файл ARJ.CFG не найден, используются установки по умолчанию. В случае с операционными системами класса UNIX поиск в каталоге программы не производится, вместо этого действует принятая в UNIX процедура поиска. Она детально описана в документации по ARJ в UNIX. + Начиная с версии 2.42.05, REARJ понимает модификатор "T" в REARJ.CFG. Этот модификатор указывает, что REARJ должен сам удалить выходной архив, если в процессе преобразования были сбои. ПОДДЕРЖКА РАСШИРЕННЫХ АТРИБУТОВ Начиная с версии 2.62.10, сохранять и восстанавливать расширенные атрибуты (EA) стало возможным без помощи внешних утилит. EA сжимаются и хранятся как часть заголовка. ARJ поддерживает расширенные атрибуты стандарта IBM SAA в системах OS/2 и Windows NT. Ограничения на поддержку EA: * Возможность продолжения прерванной многотомной архивации (-jn) не будет работать при включенных EA. Вам необходимо либо отказаться от поддержки EA посредством -2e, либо создать архив с нуля, если EA представляют ценность. * В режиме "-j#" EA не поддерживаются. * В системе Windows NT перезапись расширенных атрибутов невозможна. При добавлении в ходе распаковки новых расширенных атрибутов к файлу, уже имеющему расширенные атрибуты, файл сохраняет свой исходный набор атрибутов. Были добавлены следующие ключи для управления архивацией EA: * "-2c" ограничивает список обрабатываемых EA только критическими. Заархивированные некритические EA не будет восстановлены, а при создании архивов будут сохранены только критические EA. * "-2e" задает маску включения. Если не указывать маску атрибутов, то поддержка EA вообще выключается. Выражение, которое следует за "-2e" интерпретируется по аналогии с маской имен файлов, при этом будут сохранены/распакованы только EA, попадающие под маску. Ключ можно использовать многократно для выбора по нескольким маскам. Нельзя использовать внешние списки файлов. Примеры: ARJ a test В этом примере, все EA будут сохранены. ARJ a no_eas -2e ARJ x no_eas -2e EA не будут ни сохраняться, ни распаковываться. ARJ a documents -2e.LONGNAME В этом случае, сохраняются только атрибуты, задающие имена объектов (.LONGNAME). ARJ a test -2e.CLASSINFO -2e.ICON* .CLASSINFO и .ICON* (.ICON, .ICON1, .ICONPOS) будут сохранены. При архивации рабочего стола OS/2 имеет смысл использовать маску "-2e.*". В таком случае сохраняются только системные атрибуты, их имена начинаются на ".", в то время, как атрибуты, создаваемые прикладными программами, именуются по названиям программ. * "-2l" включает режим преобразования расширенных атрибутов .LONGNAME (используемых в основном для хранения заголовков объектов WPS) к именам файлов, что упрощает перенос документов с системы, где OS/2 установлена на FAT. Если заголовок объекта (и, следовательно, расширенный атрибут) содержит символы перевода строки или другие недопустимые для имен файлов символы, в архиве будет сохранено обычное имя файла, и расширенный атрибут .LONGNAME будет также записан в архив. Данный ключ игнорируется во время распаковки. Ключи "-2e" и "-2x" не влияют на данный ключ (но расширенные атрибуты .LONGNAME не будут сохраняться, если явным или неявным образом отключена их архивация). * "-2x" задает маску исключения. Далее должно следовать выражение, определяющие исключение EA. Правила те же самые, что и с "-2e". Можно указывать одновременно и маску включения, и маску исключения, например: ARJ a backup_ -r -p1 -h#2 -2e.* -2x.FED* c:\projects Пример показывает способ регулярной архивации рабочего каталога с сохранением всех системных расширенных атрибутов, но исключая те из них, которые созданы редактором FED (Fast Editor Lite, автор - Сергей Евтушенко, evsi@@naverex.kiev.ua ) - эта программа не следует традиционным рекомендациям и обозначает с помощью системных расширенных атрибутов позиции в текстовых файлах. Расширенные атрибуты также поддерживаются в ARJSFXV, их хранение в самораспаковывающихся архивах реализовано по той же технологии, что и в обычных архивах ARJ. Присутствие EA при архивации обозначается сообщением "(EAs: ...)" после статистики по размеру файла. Обратите внимание, что этот размер может отличаться от того, который будет сообщен при распаковке - это связано с тем, что в первом случае показывается размер внутренней структуры, используемой для хранения EA, а во втором случае - пространство, необходимое операционной системе. Количество расширенных атрибутов и занимаемый ими размер отображается в статистике по команде "ARJ v". ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ Q: Приложения третьих фирм не распознают архивы ARJ для @PLATFORM! A: Попробуйте отключить обработку расширенных атрибутов (-2e), хранение DTA/DTC (-j$), твердые ссылки (-2h), и включите режим совместимости с DOS (-2d). Большая часть проблем связана с новым форматом заголовка в текущих версиях ARJ, который, несмотря на 100% совместимость и открытое описание, не поддерживается программным обеспечением. Известные примеры таких приложений включают File Commander v 2.11, Norton Commander v 5.00 и WinRAR v 2.60. Q: ARJ/2 и InfoZIP сообщают различные размеры расширенных атрибутов. В чем причина? A: Как было сказано ранее, ARJ/2 сообщает размер собственной области данных, в которой хранятся EA. Этот размер, как правило, не совпадает с тем, который выделяет ОС (в системах OS/2-16, OS/2-32, NT под EA резервируются различные структуры). При распаковке архива будет показан объем, выделенный системой. Q: Как сохранить папки рабочего стола OS/2 Workplace Shell вместе с их пиктограммами? A: Папки представлены директориями, следовательно, нужно включить архивацию директорий по -a1 или -hbfd. Q: EA пропали после того, как я добавил файлы в архив под DOS. A: Текущие версии ARJ/DOS и ARJ32, а также ARJ/2 до 2.62.10, выбрасывают расширенные атрибуты из заголовков при изменении архива. Q: Я хочу создать однотомный самораспаковывающийся архив, который поддерживает EA, но ARJ/2 использует ARJSFX вместо ARJSFXV. A: Вы должны указать ARJ/2 подключить ARJSFXV/2. Самый лучший путь для этого состoит в том, чтобы задать заведомо большой объем тома (например, -va). Q: Как создать простейший инсталлятор средствами ARJ/2? A: ARJSFX/2 может выполнять команды OS/2 после распаковки архива. Пример: создайте пакетный файл, который должен запуститься по завершению инсталляции. Например, INSTALL2.CMD: ======= /* REXX */ if RxFuncQuery('SysLoadFuncs') then do call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' call SysLoadFuncs end say "Инсталляция завершена, создаются объекты WPS..." call SysCreateObject .... ======== и т.п. Теперь создайте комментарий к архиву, где первой строкой будет: )) \InstallDir\ -b -x -y -! INSTALL2.CMD Назовите его, например, CMT.ANS. Теперь создайте архив ARJSFX: ARJ a PACKAGE.EXE -je -r -a -jm -zCMT.ANS -xCMT.ANS В результате будет создан самораспаковывающийся архив с запуском програмы-инсталлятора. Q: Как отличить архивы ARJ/ARJZ/ARJ32? A: Просмотреть архив командой ARJ V. В поле "Host OS" будет указан тип ОС, а информация из поля "Revision" может использоваться для идентификации версии архиватора: 1 = ARJ до версии 0.14, ARJZ в режиме совместимости (-md меньше 26624) 2 = ARJ v 0.14...0.20 3 = ARJ v 1.00...2.22 4 = ARJ v 2.30, X1 5 = ARJ v 2.39a, 2.39b 6 = ARJ v 2.39c...2.41 7 = ARJ v 2.42a...2.50a 8 = ARJ v 2.55...2.61, ARJ/2 v 2.61 9 = ARJ v 2.62, ARJ/2 v 2.62, ARJ32 v 3.00 10 = ARJ v 2.70 и выше, ARJ/2 v 2.62.10 и выше 11 = ARJ с поддержкой UNIX (2.77/3.10 и выше) 50 = ARJZ с максимальным расстоянием 32 КБ 51 = ARJZ с максимальным расстоянием 64 КБ 100 = ARJ32 v 3.00b...3.01 101 = ARJ32 v 3.02 и выше Примечания: 1. Версии ARJ с форматом заголовка 1 применяли другой метод сжатия по -m4. Поддержка этого метода была упразднена в ARJ v 1.xx. Могут возникнуть проблемы с обработкой таких архивов в @PRODUCT. 2. ARJ v 2.76.07 и выше способен читать новый формат даты UNIX, создаваемый версиями 3.10/2.77. Это сделано в целях поддержки этого формата релизными версиями ARJ. ИНФОРМАЦИЯ ДЛЯ РАЗРАБОТЧИКОВ Формат времени UNIX распознается по значениям "UNIX" или "NeXT" в поле "Host OS", и по значению "arj_nbr" (номер версии) 11 или более. В этом случае все поля даты в заголовке представлены в формате UNIX, т.е. 4-байтовых значений, содержащих число секунд, которое прошло с 01/01/1970, 00:00:00 всемирного времени. В прочих аспектах сохраняется полная совместимость со стандартным форматом ARJ. Для описания не предусмотренных форматом атрибутов применяются расширенные заголовки. Их общая структура отражена ниже (все величины - little-endian, т.е. старшие байтовые разряды хранятся последними): Разм. Описание ----- -------- 1 Идентификатор заголовка. 1 Флаг продолжения. Если установлен в 0, означает конец цепи блоков, так что заголовок может быть собран и обработан. Также он обеспечивает проверку целостности блоков. ? Данные заголовка. Идентификатор 0x45 ('E') == расширенные атрибуты ------------------------------------------------ Имеет силу только если номер версии ARJ (arj_nbr) - 10 или выше. Блок упакованных EA - сложная структура, которая может быть разбита на несколько томов, находясь в разных заголовках одного файла. В таком случае, все отдельные части должны быть соединены после того, как прочитан последний блок (это проверяется по отсутствию флага EXTFILE_FLAG. Формат блока: Разм. Описание ----- -------- 1 Метод сжатия (0...4, может отличаться от примененного к файлу) 2 Размер распакованных данных в байтах 4 CRC32 распакованных данных ? Упакованные данные EA могут быть распакованы обычными алгоритмами ARJ. Если файл зашифрован, упакованные данные также зашифрованы (но шифрование реинициализируется перед обработкой EA). Модификатор пароля в случае с многотомными файлами берется из того тома, где лежит первая часть файла. После распаковки, данные представляют собой следующую структуру: Разм. Описание ----- -------- 2 Общее количество записей ? Записи, хранящие расширенные атрибуты Записи собраны в один блок, и таким образом, должны обрабатываться последовательно. Каждая запись хранит в себе данные одного EA, и ни один из EA не может быть представлен двумя записями. Запись имеет следующий формат: Разм. Описание ----- -------- 1 флаг fEA (указывает на критические EA) 1 Размер названия атрибута 2 Размер значения атрибута ? Название атрибута (не заканчивается нулем) ? Значение атрибута Если файл текстовый, его расширенные атрибуты должны обрабатываться как двоичные данные. При разбиении на несколько томов, разбивается уже готовая структура, т.е. не происходит ни реинициализации сжатия, ни повтора заголовка (блок создается в памяти целиком и впоследствии дробится по томам). Идентификатор 0x4F ('O') == данные о владельце ---------------------------------------------- Содержит имя пользователя-владельца в символьном представлении. За именем владельца может следовать наименование группы. Имеет силу при arj_nbr >= 11. Разм. Описание ----- -------- 1 Длина имени пользователя. ? Имя пользователя (не заканчивается нулем), ИЛИ Имя пользователя (заканчивается нулем), за которым следует ? Наименование группы (не заканчивается нулем). Идентификатор 0x55 ('U') == специальные файлы UNIX -------------------------------------------------- Формат данной структуры не является фиксированным. Имеет силу при arj_nbr >= 11. Разм. Описание ----- -------- 1 Дескриптор специального файла: Биты 0...4 = размер поля данных (допускается 0; 31 имеет специальное назначение) Биты 5...7 = тип: 000 = канал (pipe) 001 = твердая ссылка 002 = символьная ссылка 003 = блочное устройство 004 = символьное устройство ? Если размер поля данных в дескрипторе был указан как 31, то за дескриптором следуют два байта, содержащие настоящий размер. В прочих случаях эта область за дескриптором отсутствует. ? Исходные данные. Размер сооветствует значению из дескриптора или специального поля размера. Формат: Канал: Пусто (нулевой размер) Ссылка: Целевой файл (не заканчивается нулем). Устройство: Структура dev_t с форматом и порядком следования байт, принятом на платформе, где создавался файл. ID 0x6F ('o') == данные о владельце (в числовом виде) ----------------------------------------------------- Содержит идентификаторы (UID и GID). Имеет силу при arj_nbr >= 11. Разм. Описание ----- -------- 1 Длина поля данных (8 в текущей реализации). 4 UID владельца (старший байт идет последним). 4 GID владельца (старший байт идет последним). СВЕДЕНИЯ О СОВМЕСТИМОСТИ ARJ тестировался на следующих ОС и файловых системах: DOS (FAT) MS-DOS v 2.11, 3.20, 3.21, 4.01, 5.00, 6.00, 6.20, 6.22 PC DOS v 6.30, 7.00 Windows 95, 98 Windows NT Workstation v 3.51, 4.00 OS/2 (FAT, HPFS, Ext2FS, JFS, NTFS) Microsoft OS/2 v 1.21 IBM OS/2 v 1.30, 2.00, 2.10, 3.00, 4.00, 4.50 Подсистема OS/2 в Windows NT v 3.51, 4.00, Windows 2000 Win32 (FAT, HPFS, NTFS) Windows 95, 98, ME Windows NT v 3.51, 4.00, Windows 2000, Windows XP Linux (UMSDOS, HPFS, Ext2FS, Ext3FS, JFS) Linux v 2.2.13/19-20, 2.4.5/18-23, 2.6.3 glibc v 2.1.2, 2.1.3, 2.2.3 FreeBSD (FAT, UFS, HPFS) FreeBSD v 3.4/STABLE QNX (QNX4FS, FAT) QNX v 6.2.1/PE Patch B Конец файла