Формат файла custom.ini

В стандартной поставке MultiArc идет ограниченное количество FMT-модулей, поддерживающих распространенные архиваторы. Среди прочих присутствует модуль CUSTOM.FMT, который позволяет подключать "недостающие" архиваторы путем описания формата выводимого архиватором листинга. Для описания формата предназначен файл CUSTOM.INI.

Каждый добавляемый тип архива описывается в отдельной секции [Имя архива], используемый для имени типа архива. Далее следуют параметры:

TypeName (необязательный параметр)
перекрывает имя формата, определенное в названии секции (оставлен для совместимости)
ID (необязательный параметр)
идентификатор архива - последовательность двузначных шестнадцатеричных чисел, разделенные пробелом (например, запись "ID=1a 4a 61 72 1b" - описывает идентификатор JAR-архива)
IDOnly (необязательный параметр)
"только идентификатор архива". Если равно "1", то расширение файла игнорируется и тип архива определяется только по полю ID. Если равно "0", то для определения типа архива используется расширение файла и поле ID (если присутствует в данной секции).
IDPos (необязательный параметр)
позиция, с которой CUSTOM.FMT начинает искать идентификатор архива (ID). Если поле не определено, то ID ищется начиная с начала файла. По умолчанию FAR "отдает" плагину на анализ первые 128К данных.
Extension
расширение архива (без точки).
List
команда внешнего архиватора для получения листинга. Имя архива будет добавлено после этой строки. Например, для поля List="jar32 v -y" будет сформирована команда: jar32 v -y имя_архива
Errorlevel (необязательный параметр)
анализ листинга производится только если код завершения архиватора будет меньше указанного в параметре Errorlevel числа.
IgnoreErrors (необязательный параметр)
если не равно 0, то код возврата команд архиватора будет игнорироваться. Использовать осторожно!
Start (необязательный параметр)
подстрока, определяющая начало анализа листинга. Если строка начинается с символа '^', то поиск подстроки ведется со второго символа от начала текущей строки листинга.
End (необязательный параметр)
подстрока, определяющая окончание анализа листинга. Если строка начинается с символа '^', то поиск подстроки ведется со второго символа от начала текущей строки листинга.
Format0 ... FormatN
параметры, описывающие запись для одного элемента архива. Каждый параметр описывает очередную строку записи, допускающую следующие коды:
кодОписание
n имя файла
. remove trailing spaces from file name and append name with dot
z размер файла
c file description
p упакованный размер файла
d день
t месяц
TTT три буквы имени месяца (Jan, Feb, Mar, ...)
y год
h часы
H hours modifier letter (a - a.m. time, p - p.m. time)
m минуты
s секунды
a атрибуты файла
* skip until first space or end of line
b day of last access
v month of last access
e year of last access
x hours of last access
l minutes of last access
k seconds of last access
j day of creation
g month of creation
f year of creation
o hours of creation
i minutes of creation
u seconds of creation
r CRC (hex)
C поле, описывающее главы (Chapters)
(<число>) optional digits, some or all digits may be missing
Если строка начинается с символа '^', то поиск подстроки ведется со второго символа от начала текущей строки листинга.
IgnoreString0 ... IgnoreStringN
параметры, задающие строки, которые модуль будет игнорировать при анализе листинга. Если строка начинается с символа '^', то поиск подстроки ведется со второго символа от начала текущей строки листинга.
Extract ... MoveRecurse
параметры, описывающие команды архиватора.
КомандаОписание
Extract распаковка
ExtractWithoutPath распаковка без путей
Test тестирование
Delete удаление
Comment архивный комментарий
CommentFiles файловый комментарий
SFX преобразование в SFX
Lock запрет модификации
Protect защита от повреждений
Recover восстановление архива
Add добавление файлов
Move перенос файлов в архив
AddRecurse добавление файлов и папок
MoveRecurse перенос файлов и папок
В командных строках внешних архиваторов для различных операций обработки архивов могут использоваться псевдопеременные, описанные здесь.
AllFilesMask
маска "Все файлы"

Регулярные выражения

В качестве значений параметров FormatX, IgnoreStringX, Start, End можно использовать регулярные выражения с синтаксисом Perl5. Для использования этой возможности необходимо, чтобы соответствующее значение было корректным регулярным выражением, обрамленным прямыми слешами ('/') с необязательными буквенными флагами после заключительного слеша. Допустимы следующие флаги:
ФлагОписание
iигнорировать регистр символов
xиспользовать расширенный синтаксис (игнорировать пробелы в регулярном выражении)

Для разбора регулярных выражений используется open-source библиотека PCRE (by Philip Hazel, copyright by the University of Cambridge, England).

При использовании регулярных выражений в параметрах FormatX для получения информации из листинга используются именованные подстроки (вида (?P<name>\w+)). Распознаются следующие названия полей:
ПолеОписание
nameимя файла с относительным путем (пробельные символы в начале и конце строки игнорируются)
descriptionописание файла
sizeразмер распакованного файла в байтах (нецифровые символы в этом и других числовых полях игнорируются)
packedSizeразмер запакованного файла в байтах
attrатрибуты файла (A - архивный, R - только для чтения, S - системный, C - сжатый, H - спрятанный, D - директория)
cYear, cDay, cMonth, cHour, cMin, cSecвремя создания файла
mYear, mDay, mMonth, mHour, mMin, mSecвремя последнего изменения файла
mAMPM, mMonthAрасширенные поля для времени изменения файла
aYear, aDay, aMonth, aHour, aMin, aSecвремя доступа к файлу
CRC32-битная контрольная сумма файла CRC

Например, для разбора листинга:

 Volume in drive D is work
 Volume Serial Number is xxxx-xxxx

 Directory of D:\works\MultiArc\final\Formats

15.11.2004  07:15    <DIR>          .
15.11.2004  07:15    <DIR>          ..
14.11.2004  00:46             5 632 Ace.fmt
14.11.2004  00:46             4 608 Arc.fmt
14.11.2004  00:46             6 656 Arj.fmt
14.11.2004  00:46             6 144 Cab.fmt
15.11.2004  06:07            56 832 Custom.fmt
15.11.2004  07:14             1 551 custom.ini-re
15.11.2004  07:11            54 344 Formats.jkr
14.11.2004  00:46             4 608 Ha.fmt
14.11.2004  00:46             6 144 Lzh.fmt
15.11.2004  07:15                 0 out
14.11.2004  00:46             6 144 Rar.fmt
14.11.2004  00:46             9 216 TarGz.fmt
14.11.2004  00:46             6 656 Zip.fmt
              13 File(s)        168 535 bytes
               2 Dir(s)  37 840 883 712 bytes free

применяются следующие установки:

Start="/^ Directory of/"
End="/File\(s\)/"
Format0="/^(?P<cDay>\d+).(?P<cMonth>\d+).(?P<cYear>\d+)\s+ (?P<cHour>\d+):(?P<cMin>\d+)\s+(?P<packedSize>[\d\xff]+)\s(?P<name>.*?)\s*$/"

Строки:

Start="/^..reading directory/"
End="/^..listing completed/"
Format0="/^[^\|]*\|(?P<size>[^\|]+)\|(?P<attr>[^\|]+)\|\s+(?P<name>.*?)\s*$/"
IgnoreString0="/^---- ---- ---- ----/"

могут использоваться для разбора листинга:

jkRes utility version 002
  pack/unpack tool to work with jkRes resource bundles

..listing files from resource bundle
..reading directory...12 items found
---- ---- ---- ----
    zlib |     5632 | A.... | Ace.fmt
    zlib |     4608 | A.... | Arc.fmt
    zlib |     6656 | A.... | Arj.fmt
    zlib |     6144 | A.... | Cab.fmt
    zlib |    56832 | A.... | Custom.fmt
    zlib |     4608 | A.... | Ha.fmt
    zlib |     6144 | A.... | Lzh.fmt
    zlib |     6144 | A.... | Rar.fmt
    zlib |     9216 | A.... | TarGz.fmt
    zlib |     6656 | A.... | Zip.fmt
    zlib |    13012 | A.... | Custom.ini
    zlib |     1072 | A.... | custom.ini-re
---- ---- ---- ----
..listing completed
..done

Смотрите также:
поддержка архивов