Данный экран достаточно тщательно спроектирован, чтобы уместиться в 23 строки и 79 колонок, поэтому он помещается в терминальном окне 24x80.

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

Самым примитивным способом создания справочного экрана было бы помещение каждой строки в С-инициализатор в исходном коде ascii. с, а затем заставить код, проходящий через инициализатор, выписывать строки. Проблема такого метода заключается в том, что дополнительные данные в формате С-инициализатора (завершающие разделители строк, строковые кавычки, запятые) удлиняли бы строки более 79 символов. Это привело бы к переносу строк и усложнило бы преобразование внешнего вида кода к внешнему виду вывода, что, в свою очередь, усложнило бы редактирование справочного дисплея, который и без этого сложно было уместить в экран на 24x80 растровых ячеек.

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

Пример 9.5. Справка по использованию программы ascii

Usage: ascii [-dxohv] [-t] [char-alias...]

-t = one-line output -d = Decimal table -o = octal table -x = hex table -h = This help screen -v = version information Prints all aliases of an ASCII character. Args may be chars, С \-escapes, English names, '"-escapes, ASCII mnemonics, or numerics in decimal/octal/hex.

Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex

000NUL1610DLE3220483006440®8050P966011270P
101SOH1711DC13321I493116541A8151Q9761a11371q
202STX1812DC23422ii503226642В8252R9862b11472r
303ЕТХ1913DC33523#513336743С8353S9963с11573s
404EOT2014DC43624$523446844D8454T10064d11674t
505ENQ2115NAK3725%533556945E8555U10165e11775u
606АСК2216SYN3826&543667046F8656V10266f11876v
707BEL2317ETB3927t553777147G8757w10367g11977w
808BS2418CAN4028(563887248H8858X10468h12078X
909нт2519EM4129)573997349I8959Y10569i12179У
10LF26SUB422A*58ЗА744AJ905AZ1066Aj1227Az
11OBVT27IBESC432B+593B;754BК915B[1076Bk1237B
12ОСFF28FS442Ci603C<764CL925C\1086C11247C
130DCR29IDGS452D-613D=774DM935D]1096Dш1257D
14SO30IERS462E623E>784EN945EA1106En1267E-
150FSI31IFUS472F/633F?794FО955F1116Fо1277F

DEL

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

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

Предположим, что требуется поместить страницу табличных данных на 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

Перейти на страницу:

Похожие книги