Вход/Регистрация
Искусство программирования для Unix
вернуться

Реймонд Эрик Стивен

Шрифт:

15 0F SI 31 1F US 47 2F / 63 3F ? 79 4F О 95 5F _ 111 6F о 127 7F del

Данная проблема решается следующим образом. В состав исходного дистрибутива входит файл с именем

splashscreen
, в котором содержится такой же экран использования, как в приведенном примере. Исходный код на С содержит следующую функцию.

void showHelp(FILE *out, char *progname) {

 fprintf(out,"Usage: %s [-dxohv] [-t] [char-alias...]\n", progname);

#include "splashscreen.h"

 exit(0);

}

Файл

splashscreen.h
генерируется инструкцией make-файла.

splashscreen.h: splashscreen

 sed <splashscreen >splashscreen.h \

– e 's/\\/\\\\/g' -e 's/"/\\"/' -e 's/.*/puts("&");/'

Поэтому при сборке программы файл splashscreen автоматически преобразовывается в серию вызовов функции вывода, которые C-препроцессор затем включает в необходимую функцию.

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

По тем же причинам инициализатор, содержащий строки синонимичных названий, также генерируется посредством sed-сценария в make-файле из файла с именем

nametable
, входящего в состав исходного дистрибутива ascii. Большая часть файла
nametable
просто копируется в С-инициализатор. Но процесс генерации упростил бы адаптацию данного средства для других 8-битовых наборов символов, таких как ISO-8859 (Latin-1 и подобные).

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

9.2.2. Учебный пример: генерация HTML-кода для табличного списка

Предположим, что требуется поместить страницу табличных данных на Web-страницу. Необходимо, чтобы первые несколько строк выглядели, как в примере 9.6.

Пример 9.6. Необходимый формат вывода для таблицы звезд

Aalat David Weber The Armageddon Inheritance

Aelmos Alan Dean Foster The Man who Used the Universe

Aedryr Steve Miller/Sharon Lee Scout's Progress

Aergistal Gerard Klein The Overlords of War

Afdiar L. Neil Smith Tom Paine Maru

Agandar Donald Kingsbury Psychohistorical Crisis

Aghirnamirr Jo Clayton Shadowkill

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

<tr>
и
<td>
для новой записи. Такая необходимость очень быстро стала бы утомительной. Но еще хуже то, что при изменении формата списка каждую запись потребуется кодировать вручную.

Внешне разумный способ решить данную проблему заключался бы в том, чтобы внести данные в трехстолбцовую таблицу в базе данных, а затем использовать некоторую причудливую CGI-методику [95] или поддерживающий базы данных шаблонный процессор, например, PHP для создания страницы на лету. Однако, предположим, разработчику известно, что список не будет изменяться очень часто, и не требуется запускать сервер баз данных для того, чтобы отображать данные, а также нежелательно загружать сервер излишним CGI-трафиком.

95

Здесь CGI означает не Computer Graphic Imagery, а технологию Common Gateway Interface (интерфейс общего шлюза), которая применяется для создания интерактивных Web-документов.

Существует простое решение: поместить данные в файл в простом табличном формате, см. пример 9.7.

Пример 9.7. Модель таблицы звезд

Aalat :David Weber :The Armageddon Inheritance

Aelmos :Alan Dean Foster :The Man who Used the Universe

Aedryr :Steve Miller/Sharon Lee :Scout's Progress

Aergistal :Gerard Klein :The Overlords of War

Afdiar :L. Neil Smith :Tom Paine Maru

  • Читать дальше
  • 1
  • ...
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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