Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Баннерная программа на Unix и Unix-подобных операционных системах выводит большую ASCII-версию текста, которая поставляется в качестве программных аргументов. Одно из применений команды - создание высоковидимых разделительных страниц для задач печати.
The banner program on Unix and Unix like operating systems outputs a large ASCII art version of the text that is supplied to it as its program arguments. One use of the command is to create highly visible separator pages for print jobs.
Операция
Каждый аргумент сокращается на 10 символов и печатается на собственной "строке". Чтобы напечатать несколько слов на одной строке, они должны быть переданы как один аргумент, что делается из оболочки, избегая или цитируя слова, как это уместно.
Each argument is truncated at 10 characters and printed on a "line" of its own. To print multiple words on a single line, they must therefore be passed as a single argument, which is done from the shell by escaping or quoting the words as appropriate.
Реализация
Способ, которым программа реализуется внутри, устарел. Используемые шрифты символов встроены в сам код программы, как статически инициализированные структуры данных. Используются две структуры данных. Первый - это таблица данных, содержащая последовательность инструкций по печати, которые кодируют битмап для каждого символа (в кодировании, специфичном для программы баннера). Второй - это индекс в этой таблице, который указывает, для каждого кода символа, где начинаются и заканчиваются инструкции по печати для этого символа. Обе структуры данных были написаны вручную. Спинеллис отмечает, что "трудно придумать более подверженный ошибкам и неустойчивый формат данных". Он отмечает резкий контраст между исходным кодом баннерной программы и автоматически генерируемым исходным кодом для кодирования компьютерных шрифтов в программные данные (используя для сравнения данные шрифтов 6 на 10 в исходном коде порта mac68k NetBSD). Автоматически генерируемые данные комментируются, документируя с помощью ASCII-изображения, как были получены битовые шаблоны. Автоматически генерируемые данные были получены из файла битмапа, который сам был создан с использованием программы создания/редактирования битмапа с графическим пользовательским интерфейсом. И автоматически генерируемые данные организованы в прямой и очевидный способ - последовательность фиксированной длины некодированных байтов для каждого глифа. От Седар Солюшнс. Запускается на современных системах Linux с 2008 года. Печатается горизонтально только с фиксированным размером. Автор: Мэри Энн Хортон из Калифорнийского университета в Беркли, распространяется как часть пакета bsdmainutils, под названием Runs on modern Linux, GNU Hurd, and Mac OS X systems as of 2008. Печатается вертикально с шрифтом переменного размера.
The way that the program is implemented internally is antiquated. The character fonts used are hardwired into the program code itself, as statically initialized data structures. Two data structures are used. The first is a data table comprising a sequence of printing instructions that encode the bitmap for each character (in an encoding specific to the banner program). The second is an index into that table that indicates, for each character code, where the printing instructions for that character begin and end. Both data structures were hand written. Spinellis observes that it is "difficult to come up with a more error prone and unmaintainable data format". He observes a stark contrast between the source code of the banner program and automatically generated source code for encoding computer fonts into program data (using the 6 by 10 font data in the source code of the mac68k port of NetBSD for comparison). The automatically generated data are commented, documenting with ASCII art how the bit patterns were derived. The automatically generated data were generated from a bitmap file, itself generated using a bitmap creation/editing program with a graphical user interface. And the automatically generated data are organized in a straightforward and obvious manner — a fixed length sequence of unencoded bytes for each glyph. By Cedar Solutions. Runs on modern Linux systems as of 2008. Prints horizontally only with a fixed size. By Mary Ann Horton at the University of California Berkeley, distributed as part of the bsdmainutils package, under the name Runs on modern Linux, GNU Hurd, and Mac OS X systems as of 2008. Prints vertically with variable size font.