Чтение онлайн

на главную

Жанры

Разработка приложений в среде Linux. Второе издание

Троан Эрик В.

Шрифт:

#include <popt.h>

void poptPrintHelp(poptContext con, FILE * f, int flags);

void poptPrintUsage(poptContext con, FILE * f, int flags);

Обе эти функции ведут себя практически одинаково, записывая соответствующий тип сообщения в файл

f
. Аргумент
flags
на данный момент не используется ни одной из этих функций, и должен быть равен нулю для совместимости с будущими версиями библиотеки
popt
.

Поскольку за справочное сообщение отвечает параметр

– -help
,
а за сообщение об использовании — параметр
– -usage
, библиотека
popt
предлагает простой способ добавления этих двух параметров в программу. Чтобы добавить эти параметры в таблицу параметров, можно использовать макрос
POPT_AUTOHELP
[185] , который выводит соответствующие сообщения в
STDOUT
и закрывается после возвращения кода
0
[186] . В следующем примере показана таблица параметров в файле
grep.с
; мы должны добавить одну строку в таблицу параметров для grep, чтобы активизировать автоматическое генерирование справочных сообщений.

185

Он также добавляет параметр

– ?
, который соответствует
– -help
.

186

Макрос

POPT_AUTOHELP
расширяется для включения вложенной таблицы параметров, определяющей новые параметры и обратный вызов, при котором реализуются эти параметры.

 95: struct poptOption optionsTable[] = {

 96: { "extended-regexp", 'E', POPT_ARG_VAL,

 97: &mode, MODE_EXTENDED,

 98: "шаблоном для соответствия является расширенное регулярное "

 99: "выражение" },

100: { "fixed-strings", 'F', POPT_ARG_VAL,

101: &mode, MODE_FIXED,

102: "шаблоном для соответствия является базовая строка, (не "

103: "регулярное выражение)", NULL },

104: { "basic-regexp", 'G', POPT_ARG_VAL,

105: &mode, MODE_REGEXP,

106: "шаблоном для соответствия является базовое регулярное выражение" },

107: { "ignore-case", 'i', POPT_ARG_NONE, &ignoreCase, 0,

108: "выполнять поиск, чувствительный к регистру", NULL },

109: { "max-count", 'm', POPT_ARG_INT, &maxCount, 0,

110: "завершить после получения N совпадений", "N" },

111: { "regexp", 'е', POPT_ARG_STRING, &pattern, 0,

112: "регулярное выражение для поиска", "pattern" },

113: POPT_AUTOHELP

114: { NULL, ' \0', POPT_ARG_NONE, NULL, 0, NULL, NULL }

115: };

Ниже показан пример того, как выглядит справочное сообщение, сгенерированное данной таблицей

параметров.

Usage: grep [OPTION...]

Использование: grep [ПАРАМЕТРЫ...]

 -Е, --extended-regexp шаблоном для соответствия является

расширенное регулярное выражение

 -F, --fixed-strings шаблоном для соответствия является

базовая строка (не регулярное выражение)

 -G, --basic-regexp шаблоном для соответствия является базовое

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

 -i, --ignore-case выполнять поиск, чувствительный к регистру

 -m, --max-count=N завершить после получения N совпадений

 -е, --regexp=pattern регулярное выражение для поиска

Help options:

 -?, --help Show this help message

 --usage Display brief usage message

Параметры справки:

 -?, --help Показать это сообщение

 --usage Отобразить краткое сообщение об использовании

Хотя эта информация и имеет привлекательный вид, она требует некоторых уточнений. В первой строке не сказано, что команда ожидает имена файлов в командной строке. Показанный здесь текст

[OPTION...]
принят в
popt
по умолчанию, и с помощью функции
poptSetOtherOptionHelp
может быть изменен для получения более детального описания.

#include <popt.h>

poptSetOtherOptionHelp(poptContext con, const char * text);

Первым параметром является содержимое, а второй параметр определяет текст, который должен появиться после имени программы. Если добавить следующий вызов

poptSetOtherOptionHelp(optCon, "<шаблон> <список файлов>");

то первая строка в справочном сообщении будет изменена на

Usage: grep <шаблон> <список файлов>

Использование: grep <шаблон> <список файлов>

что является более точным.

Последнее, что требуется уточнить в отношении справочных сообщений, это способ обработки вложенных таблиц. Давайте снова обратимся к справочному сообщению для нашей программы

grep
; для параметров справки выделяется отдельный раздел справочного сообщения. Если элемент
POPT_ARG_INCLUDE_TABLE
таблицы параметров содержит член
descrip
, то строка будет использоваться в качестве описания для всех параметров во вложенной таблице, и эти параметры будут отображаться в своем собственном разделе справочного сообщения (подобно параметрам справки для
tail
). Если
descrip
будет иметь значение
NULL
, то параметры для вложенной таблицы будут отображаться вместе с параметрами из главной таблицы, а не в своем собственном разделе.

Поделиться:
Популярные книги

Авиатор: назад в СССР 12

Дорин Михаил
12. Покоряя небо
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Авиатор: назад в СССР 12

Два лика Ирэн

Ром Полина
Любовные романы:
любовно-фантастические романы
6.08
рейтинг книги
Два лика Ирэн

Сержант. Назад в СССР. Книга 4

Гаусс Максим
4. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сержант. Назад в СССР. Книга 4

Прометей: каменный век

Рави Ивар
1. Прометей
Фантастика:
альтернативная история
6.82
рейтинг книги
Прометей: каменный век

Камень Книга одиннадцатая

Минин Станислав
11. Камень
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Камень Книга одиннадцатая

Мастер Разума IV

Кронос Александр
4. Мастер Разума
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер Разума IV

Шведский стол

Ланцов Михаил Алексеевич
3. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Шведский стол

Кодекс Охотника. Книга XXV

Винокуров Юрий
25. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга XXV

Серые сутки

Сай Ярослав
4. Медорфенов
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Серые сутки

Его наследник

Безрукова Елена
1. Наследники Сильных
Любовные романы:
современные любовные романы
эро литература
5.87
рейтинг книги
Его наследник

В ожидании осени 1977

Арх Максим
2. Регрессор в СССР
Фантастика:
альтернативная история
7.00
рейтинг книги
В ожидании осени 1977

Играть, чтобы жить. Книга 1. Срыв

Рус Дмитрий
1. Играть, чтобы жить
Фантастика:
фэнтези
киберпанк
рпг
попаданцы
9.31
рейтинг книги
Играть, чтобы жить. Книга 1. Срыв

Сердце Дракона. Том 11

Клеванский Кирилл Сергеевич
11. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.50
рейтинг книги
Сердце Дракона. Том 11

Строгий Режим

Тесленок Кирилл Геннадьевич
3. Гарем вне закона
Фантастика:
фэнтези
юмористическая фантастика
5.45
рейтинг книги
Строгий Режим