Новые книги

Shell -- это командная оболочка. Но это не просто промежуточное звено между пользователем и операционой системой, это еще и мощный язык программирования. Программы на языке shell называют сценариями, или скриптами. Фактически, из скриптов доступен полный набор команд, утилит и программ UNIX. Если этого недостаточно, то к вашим услугам внутренние команды shell -- условные операторы, операторы циклов и пр., которые увеличивают мощь и гибкость сценариев. Shell-скрипты исключительно хороши при программировании задач администрирования системы и др., которые не требуют для своего создания полновесных языков программирования.
В той отрасли, где мы работаем, библиотека DirectDraw появилась довольно давно. Во всяком случае, за это время она успела доказать свои возможности, и о ней было написано несколько книг. Как обычно, эти книги отличаются по своему качеству. Однако в основном это были добротные учебники, которые (как и многие книги о компьютерах) были написаны за три месяца авторами, изучавшими предмет по ходу дела. В результате большинство этих книг содержит лишь подготовительный материал. Теперь, когда библиотека DirectDraw подросла и обрела свою репутацию (во всяком случае, она старше других компонентов DirectX), настало время уйти от основ и познакомиться с ее некоторыми нетривиальными возможностями.

Эта книга начинается с того, на чем другие книги обычно заканчивались. Мы поговорим об основах DirectDraw, но лишь в общих чертах. Читатель — опытный программист, но незнакомый с DirectDraw — сможет с ходу войти в курс дела. Затем мы перейдем к другим темам, столь же интересным, сколь и полезным.

Цель этой книги — научить вас работать с DirectDraw, а не предоставить некоторую «структурную основу» или нестандартный API, который бы выполнял за вас всю работу. Демонстрационные программы написаны на C++ и используют MFC, но совсем не для того, чтобы скрыть все технические подробности. С++ и MFC — превосходные инструменты, потому что с их помощью любое приложение можно написать несколькими разными способами. Примеры для этой книги были написаны так, чтобы при этом получались структурированные и удобные для чтения проекты, которые наглядно показывают, что и почему происходит в программе.

Помимо DirectDraw, во многих примерах используется библиотека DirectInput. Строго говоря, при программировании графики для Windows можно обойтись и без DirectInput, но ей все же стоит воспользоваться. Она работает быстрее традиционных средств ввода Windows и к тому же входит в DirectX, так что для работы с ней не потребуется никаких дополнительных SDK.

Функции YAZ

Учебник РНР
Назад Вперёд

CVII. Функции YAZ

Введение

Это расширение предлагает интерфейс PHP с набором утилит YAZ, реализующим протокол Z39.50 для получения информации. С помощью этого расширения вы легко сможете реализовать Z39.50 origin (клиент), который ищет или сканирует Z39.50 targets (серверы) параллельно.

YAZ доступен с http://www.indexdata.dk/yaz/. Вы можете найти новости, примеры скриптов и т.п. для этого расширения http://www.indexdata.dk/phpyaz/.

Этот модуль скрывает сложную работу Z39.50 таким образом, что пользоваться им достаточно легко. Он поддерживает постоянные бесстатусные соединения, очень похожие на соединения, предлагаемые различными SQL API, доступными для PHP. Это означает, что сессии являются бесстатусными, но используются совместно несколькими пользователями, сохраняя таким образом соединение и шаги фазы инициализации в большинстве случаев.

Установка

Скомпилируйте YAZ и установите его. Постройте PHP с нужными модулями и добавьте опцию
--with-yaz. Ваши действия будут выглядеть примерно так:

gunzip -c yaz-1.6.tar.gz|tar xf -
gunzip -c php-4.0.X.tar.gz|tar xf -
cd yaz-1.6
configure --prefix=/usr
make
make install
cd php-4.0.X
configure --with-yaz=/usr/bin
make
make install

Пример

PHP/YAZ отслеживает соединения с targets (Z-ассоциациями). Положительное целое число представляет ID конкретной ассоциации.

Пример 1. Параллельный поиск с использованием YAZ()

Этот скрипт показывает возможность параллельного поиска этого API. При вызове без аргументов он печатает форму запроса; или (аргументы предоставлены) ищет targets в хосте массива.

$num_hosts = count ($host);
if (empty($term) || count($host) == 0) {
    echo '<form method="get">
    <input type="checkbox"
    name="host[]" value="bagel.indexdata.dk/gils">
        GILS test
    <input type="checkbox"
    name="host[]" value="localhost:9999/Default">
        local test
    <input type="checkbox" checked="1"
    name="host[]" value="z3950.bell-labs.com/books">
        BELL Labs Library
    <br>
    RPN Query:
    <input type="text" size="30" name="term">
    <input type="submit" name="action" value="Search">
    ';        
} else {
    echo 'You searced for ' . htmlspecialchars($term) . '<br>';
    for ($i = 0; $i < $num_hosts; $i++) {
        $id[] = yaz_connect($host[$i]);
        yaz_syntax($id[$i],"sutrs");
        yaz_search($id[$i],"rpn",$term);
    }
    yaz_wait();
    for ($i = 0; $i < $num_hosts; $i++) {
        echo '<hr>' . $host[$i] . ":";
        $error = yaz_error($id[$i]);
        if (!empty($error)) {
            echo "Error: $error";
        } else {
            $hits = yaz_hits($id[$i]);
            echo "Result Count $hits";
        }
        echo '<dl>';
        for ($p = 1; $p <= 10; $p++) {
            $rec = yaz_record($id[$i],$p,"string");
            if (empty($rec)) continue;
            echo "<dt><b>$p</b></dt><dd>";
            echo ereg_replace("\n", "<br>\n",$rec);
            echo "</dd>";
        }
        echo '</dl>';
    }
}
Содержание
yaz_addinfo - возвращает дополнительную информацию об ошибке
yaz_ccl_conf - конфигурирует CCL-разборщик
yaz_ccl_parse - вызывает CCL-разборщик
yaz_close - закрывает YAZ-соединение
yaz_connect - готовит соединение и Z-ассоциацию для Z39.50 target
yaz_database - специфицирует БД в сессии
yaz_element - специфицирует Element-Set Name для получения
yaz_errno - возвращает номер ошибки
yaz_error - возвращает описание ошибки
yaz_hits - возвращает количество попаданий в последнем поиске
yaz_itemorder - готовит Z39.50 Item Order с пакетом ILL-Request
yaz_present - готовит к получению (Z39.50 имеется)
yaz_range - специфицирует максимальное количество записей для получения
yaz_record - возвращает запись
yaz_scan_result - возвращает результат Scan Response
yaz_scan - готовит к сканированию
yaz_search - готовит к поиску
yaz_sort - устанавливает критерий сортировки
yaz_syntax - специфицирует предпочтительный синтаксис записи для получения
yaz_wait - ждёт запросы Z39.50 для выполнения

Назад Оглавление Вперёд
xslt_set_scheme_handlers Вверхyaz_addinfo