Пусть ресурсный файл подготовлен. Как получить доступ к
его данным во время работы программы? Для этого X предоставляет набор
процедур, которые совокупно называются менеджер ресурсов (Resource
Manager), и специальную программу
xrdb, которая позволяет считать любой ресурсный файл и включить
его в общую таблицу ресурсов сервера. Последняя называется базой данных
ресурсов сервера, и представляет собой область памяти, ассоциированную со
свойством (property)
XA_RESOURCE_MANAGER корневого окна экрана дисплея.
Наиболее простой является процедура
XGetDefault(). Она получает имя программы,
имя ресурса и определяет значение последнего. При этом она последовательно
совершает следующие шаги:
сначала ресурс ищется в базе данных сервера (в
свойстве XA_RESOURCE_MANAGER);
если он не найден, то значение ресурса определяется по
файлу ".Xdefaults", который ищется в домашней (home) директории
пользователя;
если задана переменная среды XENVIRONMENT, то ресурс
ищется в файле, на который указывает эта переменная.
Если ресурс одновременно встречается в
".Xdefaults" и файле, определяемом
XENVIRONMENT, то берется последнее значение.
В примере, приводимом ниже, используется
XGetDefault(), чтобы получить строку,
которую надо напечатать в окне программы. Предполагается, что имя программы -
"hello", а строка - ресурс с
именем "helloWorld", т.е. в
файле ".Xdefaults" должна быть
помещена, например, следующая запись:
Обратите внимание на то, что после изменения файла
".Xdefaults" он должен быть обработан программой
xrdb для того, чтобы X сервер включил в свою таблицу
обновленные ресурсы.
Функция XGetDefault() проста в обращении, но не достаточно гибка.
Так, например, с ее помощью нельзя прочитать содержимое произвольного
файла ресурсов. Рассмотрим другие более развитые возможности.
Вызов XrmInitialize() инициализирует менеджер ресурсов.
Обращение к этой функции предшествует вызовам остальных процедур.
сканирует строку, с помощью которой вызвана программа,
и "достает" из нее ресурсы и их значения, при этом создается специальная
структура данных - база данных ресурсов. Ресурсы и их значения помещаются
в нее. Указатель на базу данных передается программе через переменную
prDB. Параметр psProgName содержит имя программы,
argc - число опций в командной строке, argv -
сами опции. Аргумент prOptRec определяет, как разбирать
командную строку. nOptRecNum задает число элементов массива
prOptRec.
В примере, приводимом ниже, определяется, что в командной строке опция
"-bg" задает цвет фона; "-fg" - цвет переднего плана,
а опция "-xrm" позволяет задать в командной строке любой ресурс
программы.
считывает ресурс с именем
psResName и классом
psResClass из базы данных
*prDB. После возврата
psResType есть указатель на строку, указывающую тип ресурса. На
само значение ресурса указывает
psResVal.
Функция XrmPutResource() сохраняет ресурс в базе данных.
XrmPutFileDatabase() записывает базу данных
ресурсов в файл.