binfout(1) FreeBSD General Commands Manual binfout(1) NAME binfout -- преобразование входного потока одинаковых записей в текст по формату SYNOPSIS binfout [-qvvv] FormatFile [InputFile] DESCRIPTION Записи из входного потока InputFile или из стандартного ввода, если не задан, преобразуются в текстовый вид и выводятся на стандартный вывод. Описание записей во входном потоке и формат вывода задаются файлом FormatFile. Понимаются следующие флаги: -q Не выводит сообщений об ошибках, только устанавливает код окончания -v Повышает уровень шума от программы в процессе работы. Чем больше флагов -v тем подробнее отладочная печать. Начиная с 4-х вывод фор- матированных записей производится не в стандартный вывод, а в stderr, как и отладочная печать. FormatFile FormatFile состоит из двух частей. В первой части описан формат входного файла. Он состоит из описаний полей записи входного файла и оканчивается знаком `~'. Знак `#' является признаком начала комментария, который оканчивается концом строки. Описа- тели полей могут разделяться пробелами, табуляциями, комменртариями, кон- цами строк или не разделяться вовсе. Описатель поля состоит из цифры 1-8, которая описывает длину поля в байтах, за которой может следовать двоеточие и ровно две шестнадцатеричных цифры, которые описывают преобра- зование полей при вводе. Значения флагов: 0x01 при вводе меняются местами четные и нечетные биты 0x02 при вводе меняются местами четные и нечетные пары бит 0x04 при вводе меняются местами четные и нечетные полубайты 0x07 При вводе инвертируется порядок битов в байте (комбинация предыдущих трех флагов) 0x08 при вводе меняются местами четные и нечетные байты 0x10 при вводе меняются местами четные и нечетные пары байтов 0x20 при вводе меняются местами четные и нечетные четверки байтов 0x38 При вводе инвертируется порядок байтов в поле (комбинация предыдущих трех флагов) Во второй части описан формат выходного файла. Он начинается непосред- ственно после символа `~', который оканчивет описание входного файла, и в этой части не предусмотрены незначащие символы и комментарии. Все сим- волы от разделителя до конца файла помещается целиком в выходной поток в ответ на каждую входную запись после замен. Замены основаны на синтак- сисе формата printf(3). `%%' заменяется на `%', `%[0-9]+~(mmm)[EGXcdefgioux]' заменяется на преобразование значения поля, номер которого указан перед `~', по формату, заданному после знака `~', где `[EGXcdefgioux]' формат, как используется в printf(3), а `(mmm)' - модификаторы к этому формату. Знак `%' повторно указывать не надо. EXAMPLES Если входной поток состоит из записей, состоящих из: - IP адрес в сетевом порядке байтов - номер порта в сетевом порядке байтов - номер протокола - 5-тибайтовое число в порядке байтов процессора x86 (младший байт первый) , то на машине, где младший байт первый, по такому формату: #!/usr/local/bin/binfout 1111 2:3F 1 5 ~%5~02X %0~d.%1~d.%2~d.%3~d:%4~d %6~lld выведется текст примерно такого вида: 06 192.168.0.1:113 2648843756 BUGS Документация ни к черту. Длина полей задается только в целых байтах. Интерфейс для задания длины в битах не реализован, хотя внутри длинна используется в битах. Не поддерживает длину записей с нецелым числом байтов длиной. Некоторая запутанность в зависимости от архитектуры процессора. AUTHOR Aleksandr A. Babaylov (aka @BABOLO) .@babolo.ru http://www.links.ru/~babolo/ 12 December 2002