Смекни!
smekni.com

Методические указания по выполнению курсовых работ по дисциплине «Системное программное обеспечение» для студентов, обучающихся по специальностям 210100, 210200 и направлению 550200 (стр. 7 из 9)

Комментарий %%PageFonts, если он имеется, должен идти сразу после %%Page. Очередной комментарий %%Page обозначает конец предыдущей страницы и начало следующей. Конец последней страницы отмечается комментарием %%Trailer.

В языке PostScript нет четкого деления файла с описанием документа на раздел описания и раздел операторов (тело программы), как, например, в языках программирования Pascal или Фортран. Определения переменных в PostScript могут чередоваться с командами формирования изображения.

Текст в PostScript тоже является изображением. Важно лишь, что правильно составленная программа должна иметь правильную структуру. Определения общих для всех страниц документа переменных и процедур следует выносить в пролог.

На рисунке 3 представлена структура программы, написанная на языке описания страниц – PostScript

Рисунок 3 Структура программы

4.5.4 Обзор универсальных команд

Для описания команд используется следующая нотация:

аргумент1, аргумвнт2, ... команда @ результат1, результат2, ... %комментарий

Имя команды выделяется специальным шрифтом. Слева от имени описывается состояние стека до исполнения команды, а справа от стрелки — после ее исполнения. Минус вместо аргумента или результата обозначает отсутствие значения. Данные обозначаются словами, производными от названии типов или математических обозначений, характеризующих операцию. Такая запись приближена к записи текста программы. Например, описание операции сложения выглядит так:

р q add -> p+q

Запись команды в тексте PostScript-файла может быть такой:

4М 5.0 add

или

1710 add

Целые числа обозначаются буквами i, j, n, вещественные числа — х, у, z, логические (булевы) значения — буквой b, координаты — х, у. Буквами р, q, г, s обозначаются любые числа, как целые, так и вещественные если их тип не имеет значения. Строки, массивы и процедуры указываются вместе со скобками, в которых они определяются.

PostScript имеет команды общего назначения для работы c данными (присваивание, работа со стеком)^операторы вызова подпрограмм, ветвления и циклы. Операторов безусловного перехода и меток нет. Имеются команды ввода/вывода> но при печати на принтере они теряют смысл, так как PostScript-файл передается в принтер и обрабатывается в нем автономно, без связи с компьютером.

При интерпретации команды интерпретатор PostScript ищет ее имя в стеке словарей. Если имя найдено, соответствующее значение либо заносится в стек операндов (если это не процедура), либо исполняется (если это процедура). Если имя не найдено ни в одном из словарей, возникает ошибка и интерпретация PostScript-файла завершается. Имена стандартных команд представляют собой имена процедур, записанные в системном словаре. При необходимости эти имена можно переопределить. Команда load выполняет поиск указанного имени, но в любом сяучае заносит найденное значение в стек. Эту команду можно применять для того, чтобы использовать описанную ранее процедуру в качестве тела цикла или условного оператора.

Условный оператор if удаляет из стека операндов процедуру и логическое значение, после чего, либо исполняет процедуру,, либо нет. Процедура может использовать значения в стеке операндов, записанные до того, как туда было записано логическое значение. Условный оператор ifelse удаляет из стека операндов обе процедуры и логическое значение, после чего исполняет одну из процедур. В этом случае обе процедуры должны одинаково использовать старые значения в стеке и оставлять там одинаковое количество новых значений.

Оператор цикла for удаляет из стека операндов все свои 4 аргумента и устанавливает. значение параметра цикла равным рнач. После этого он циклически выполняет следующие действия: проверяет, не вышло ли текущее значение параметра за допустимую границу sK0Hj помещает значение параметра цикла в стек операндов, выполняет процедуру, увеличивает значение параметра на величину qшar. Шаг может быть как положительным, так и отрицательным. Если начальное значение больше конечного при положительном шаге или меньше конечного при отрицательном шаге, процедура не выполняется. Процедура может использовать предыдущие значения в стеке, а также значение параметра цикла. После окончания цикла стек не восстанавливает автоматически свое прежнее состояние, что может привести к его переполнению, поэтому, в частности, необходимо удалять из стека операндов очередное значение параметра цикла.

В таблице 1 приведен обзор некоторых универсальных команд.

4.5.5 Графический контекст

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

Среди них команды, которые заносят в специальный стек графических контекстов текущий графический контекст и могут восстановить ранее записанное состояние. Это позволяет изменять параметры вывода одной части рисунка и возвращаться к предыдущему состоянию перед выводом другой его части. Команда gsave выполняет запись в стек графических контекстов, а команда grestore считывает из этого стека графический контекст, делая его текущим. Таким образом, все изменения параметров рисования, произведенные с момента сохранения контекста, перестают действовать на последующие команды вывода графических объектов. Команда grestoreall восстанавливает самое первое состояние, записанное в стек командой gsave. Более «мощные» команды save и restore кроме сохранения графического контекста сохраняют еще и область памяти виртуальной ЭВМ, содержащую все переменные, и восстанавливают как графический контекст так и значения переменных. Эти команды можно использовать для предотвращения побочных эффектов при печати страниц, если среди команд печати встречаются команды изменения каких-либо объектов. Команда grestoreall восстанавливает последний графический контекст, сохраненный командой save, или, если таких команд не было, самый первый (верхний в стеке), сохраненный командой gsave. Образ памяти, создаваемый командой save, рекомендуется хранить в стеке операндов и использовать команду restore, предварительно убрав из стека все записанные чуда .позже операнды.

Таблица 1 Перечень команд

Описание команды Примечание
р q add->p+q -
р q sub->p-q -
р qmul->p*q -
р q div->p/q. -
ijidiv->[i/j] Целая часть от деления. Аргументы только целого типа.
i j mod->imodj Остаток от деления. Аргументы только целого типа.
p neg~>-p Изменение знака
p abs->|p| Модуль числа -
p cv.i->i Преобразование к целому типу. У вещественного числа отбрасывается дробная часть.
p cvr->x Преобразование к вещественному типу.
p round ->q Округление числа. Тип результата совпадает стипом аргумента.
(строка) cvi~> i Преобразование символьного представления числаГ1 в целое
(строка) cvr->x Преобразование символьного представления числа в вещественное
Функции
a0sin —> sin(o:D) Угол задается в градусах
P sqrt-> 4~p Квадратный корень
p ln-»ln(p) Натуральный логарифм
plog-Hgt» Десятичный логарифм
-rand->i Генератор псевдослучайных чисел в диапазоне от 0 до 231-1

Отношения

P q eq->p=q В стек помещается логическое значение true или false
pq ne->p*q
pq le->p<q
p q lt->p<q
P-q #->p>q

Логические операции

bTb2and->blAb2 Логическое И
bl b2or->blvb2 Логическое ИЛИ
Ы Ь2 хог->М=Ь2 Исключающее-ИЛИ
bnot->£ Логическое отрицание

Команды save/restore рекомендуется использовать в начале и в конце описания каждой страницы.

Такой стиль программирования позволит в начале каждой страницы получать тот графический контекст и переменные, которые были определены в прологе программы. Использование в начале/конце описания страниц команд gsave/grestore позволяет сохранять графический контекст, но не освобождает память от определенных, но уже не используемых значений. Эти команды выполняются быстрее, чем save/restore? поэтому при печати больших файлов они могут оказаться более эффективными, В таблице 2 приведены команды для работы с графическими объектами.

4.5.6 Рисование и закраска фигур

Отличительным аспектом PostScript является то, что даже текст - это разновидность графики. Первой задачей будет рисование линий для создания изображения.

Основные шаги рисования и закраски фигур:

• Начать путь оператором newpath;

• Собрать путь из отрезков и кривых (не обязательно смежных);

• Нарисовать линию оператором stroke или закрасить оператором fill.
Эта последовательность действий может быть изменена для получения более сложных результатов.

Рисование прямоугольника

Нарисуем прямоугольник на расстоянии в дюйм от сторон левого нижнего угла страницы. Начнем с функции, переводящей дюймы в единицы измерения PostScript - пункты (один пункт равен 1/72 дюйма). Осуществить такое преобразование просто - достаточно умножить число дюймов на 72: