«GKSM 93» ДИВ
И (ц): имя сегмента
В (ц): выделение
(О = НОРМАЛЬНЫЙ, 1 ^ВЫДЕЛЕННЫЙ) ЗАДАТЬ ПРИОРИТЕТ СЕГМЕНТА
«GKSM 93» ДИП
И (ц): имя сегмента
П (р): приоритет сегмента
ЗАДАТЬ ЧУВСТВИТЕЛЬНОСТЬ К УКАЗАНИЮ
«GKSM 95» Д И Ч
И (ц): имя сегмента
Ч (ц): чувствительность к указанию
(О=УКАЗАННЫЙ, 1=НЕ УКАЗЫВАЕМЫЙ)
Записи пользователя ЯГС
ЗАПИСЬ ПОЛЬЗОВАТЕЛЯ
«GKSM XXX» Д ДН
XXX >100
ДН: данные пользователя (Д байтов)ПРИЛОЖЕНИЕ 8
Справочное
ПРИМЕРЫ ПРОГРАММ
Использование функций ЯГС в программах, написанных на базе языка программирования Паскаль, показано в примерах 1—6.
В примере 1 в пакетном задании создаются примитивы вывода и запоминаются для долговременного хранения в метафайле ЯГС.
Текст, заключенный в фигурные скобки, является комментарием.
Пример 1,
{Определения и объявления опущены}
ОТКРЫТЬ ЯГС;
{станция вывода метафайла}
ОТКРЫТЬ СТАНЦИЮ (МВЫВ, ФАЙЛ-1, МВЫВ);
{Выходные данные направляются в метафайл}
АКТИВИРОВАТЬ СТАНЦИЮ (МВЫВ);
Прикладная программа формирует значения параметров для функций ЯГС (включая функции сегментации) и вызывает их, например, следующие: ЛОМАНАЯ (число точек, массив координат-точек);
ПОЛИГОНАЛЬНАЯ ОБЛАСТЬ (число точек, массив координат-точек);
ДЕАКТИВИРОВАТЬ СТАНЦИЮ (МВЫВ);
{Метафайл освобождается}
ЗАКРЫТЬ СТАНЦИЮ (МВЫВ);
ЗАКРЫТЬ ЯГС.
В примере 2 в пакетном задании считывается метафайл ЯГС и создаются выходные данные для графопостроителя.
Пример 2.
{Определения п объявления опущены}
ОТКРЫТЬ ЯГС;
{Открывается станция ввода метафайла}
ОТКРЫТЬ СТАНЦИЮ (МВВО, ФАЙЛ-1, МЯГС-ВВОДА);
{Скрывается станция для графопостроителя}
ОТКРЫТЬ СТАНЦИЮ (ГП, ГПДДО, ПЛАНШЕТНЫЙ ГП);
{Выходные данные направляются на графопостроитель} АКТИВИРОВАТЬ РАБОЧУЮ СТАНЦИЮ (ГП);
REPEAT
ПОЛУЧИТЬ ТИП ЗАПИСИ ИЗ МЯГС (МВВО. ТИП ЗАПИСИ, ДЛИНА ЗАПИСИ);
ПРОЧИТАТЬ ЗАПИСЬ ИЗ МЯГС (МВВО, ДЛИНА МАССИВА, МАССИВ);
ИНТЕРПРЕТИРОВАТЬ ЗАПИСЬ (МВВО, ТИП ЗАПИСИ, ДЛИНА МАССИВА,
МАССИВ);
UNTIL ТИП ЗАПИСИ = КОНЕЦ ФАЙЛА;
{Ввод данных на графопостроитель прекращается}
ДЕАКТИВИРОВАТЬ СТАНЦИЮ (ГП);
ЗАКРЫТЬ СТАНЦИЮ (ГП);
{Метафайл освобождается}
ЗАКРЫТЬ СТАНЦИЮ (МВВО);
ЗАКРЫТЬ ЯГС.
В примере 3 в интерактивном задании из памяти долговременного хранения (МЯГС) сегменты считываются и отображаются на поверхности отображения. Оператор выбирает один из сегментов, перемещает его на экране, преобразует и вставляет в создаваемую картину. Создание картины заканчивается нажатием кнопки «конец картины» и картина выводится на графопостроитель.
Сегменты могут быть, например, символами блок-схемы. Они появляются наверху, внизу или у края экрана и используются для построения блок-схемы.
Пример 3.
{Определения и объявления опущены}
ОТКРЫТЬ ЯГС;
(Открывается станция ввода-вывода для устройства отображения на ЭЛТ} ОТКРЫТЬ СТАНЦИЮ (УОЭЛТ, УОДД, ВЕКТОРУОЭЛТ);
{Открывается станция ввода для графопостроителя}
ОТКРЫТЬ СТАНЦИЮ (ГП, ГПДД, БАРАБАННЫЙ ГП);
{Открывается станция ввода метафайла}
ОТКРЫТЬ СТАНЦИЮ (МВВО, ФАЙЛ 1, МЯГС ВВОДА);
{Открывается независимая от станции память сегментов}
ОТКРЫТЬ СТАНЦИЮ (ОПС 1, НРСПСДД, ОПС);
{Содержимое метафайла отображается на устройстве отображения на ЭЛТ} {Если имеются сегменты, они запоминаются в общей памяти сегментов} {Выходные данные направляются на устройство отображения на ЭЛТ} АКТИВИРОВАТЬ СТАНЦИЮ (УОЭЛТ);
{Выходные данные направляются в общую память сегментов}
АКТИВИРОВАТЬ СТАНЦИЮ (ОПС 1);
{Считывается и интерпретируется МЯГС}
REPEAT
ПОЛУЧИТЬ ТИП ЗАПИСИ ИЗ МЯГС (МЯГС ВВ, ТИП ЗАПИСИ, ДЛИНА ЗАПИСИ);
ПРОЧИТАТЬ ЗАПИСЬ ИЗ МЯГС (МЯГС ВВ ДЛИНА МАССИВА, МАССИВ); ИНТЕРПРЕТИРОВАТЬ ЗАПИСЬ (ТИП ЗАПИСИ, ДЛИНА ЗАПИСИ, МАССИВ);
UNTIL ТИП ЗАПИСИ=КОНЕЦ ФАЙЛА;
{Освобождается метафайл}
ЗАКРЫТЬ СТАНЦИЮ (МВВОД);
{Вывод данных в общую память сегментов прекращается}
ДЕАКТИВИРОВАТЬ СТАНЦИЮ (ОПС 1);
{С этого момента картина, содержащаяся в метафайле, видна на носителе изображения. Сегменты, содержащиеся в графических данных, могут быть использованы для создания новой картины, которая будет выведена на графопостроитель}
REPEAT
{Указывается сегмент и обеспечивается точка позиционирования сегмента} {Разрешается ввод входных данных выбора элементов в режиме обработки событий}
ЗАДАТЬ РЕЖИМ УКАЗАНИЯ (УОЛТ, 1, СОБЫТИЕ, ЭХО);
{Разрешается ввод позиций в режиме обработки событий}
ЗАДАТЬ РЕЖИМ УСТРОЙСТВА ВВОДА ПОЗИЦИИ (УОЛТ. 1, СОБЫТИЕ, ЭХО);
FOR 1=1 ТО 2 DO BEGIN
{Считывается одно событие выбора элементов О и одно событие ввода позиций в произвольном порядке}
{Устанавливается время ожидания, равное продолжительности рабочего дня} ВРЕМЯ ОЖИДАНИЯ =8 часов;
{Ожидаются входные данные выбора элементов и ввода позиций}
ОЖИДАТЬ СОБЫТИЕ (ВРЕМЯ ОЖИДАНИЯ, PC, КЛАСС, НОМЕРЛУВ);
КЛАСС = ВЫБОР
{Получено имя сегмента}
ПОЛУЧИТЬ УКАЗАТЕЛЬ (СОСТОЯНИЕ. ИМЯ СЕГМЕНТА, ИДЕНТИФИКАТОР ВЫБОРА);
ЗАДАТЬ РЕЖИМ УКАЗАНИЯ (УОЭЛТ, 1, ЗАПРОС, ЭХО) ;
{Получена точка позиционирования сегмента}
ПОЛУЧИТЬ ПОЗИЦИЮ (НОМЕР ПРЕОБРАЗОВАНИЯ 1, ТОЧКА, ЭХО);
ЗАДАТЬ ПРЕОБРАЗОВАНИЕ НОРМИРОВАНИЯ (НОМЕР ПРЕОБРАЗОВАНИЯ 1);
{Ожидается, что последующие точки должны быть в пределах поля вывода преобразования нормирования, заданного параметром
НОМЕР ПРЕОБРАЗОВАНИЯ 1- Это преобразование должно иметь номер О, так как никакие преобразования явно не задавались}.
{Подготавливается логическое устройство ввода чисел номер 1, которое будет иметь начальное значение 1, диапазон значений от 0 до 19 и.область эха справа вверху}
ИНИЦИАЛИЗИРОВАТЬ УСТРОЙСТВО ВВОДА ЧИСЛА (УОЭЛТ, 1, 1, 1, (0.95, 1.0), (0.95, 1.0), (0, 10));
{Подготавливается логическое устройство ввода чисел номер 2. которое будет иметь начальное значение 0, диапазон значений от Оі до 3.14 и область эха слева от области логического устройства ввода числа номер 1} ИНИЦИАЛИЗИРОВАТЬ УСТРОЙСТВО ВВОДА ЧИСЛА (УОЛТ, 2.0, 1, (0.90,0.95), (0.95, 1.0), (0, 3.14));
{Подготавливается логическое устройство ввода позиций номер 1, которое будет иметь в качестве начального значения точку позиционирования сегмента и подсказку и эхо в виде вертикальной и горизонтальной пересекающихся линий, проходящих через весь экран}
ИНИЦИАЛИЗИРОВАТЬ УСТРОЙСТВО ВВОДА ПОЗИЦИИ (УОЭЛТ, 1, ТОЧКА 1, НОМЕР ПРЕОБРАЗОВАНИЯ 1, 2, (0.0, 1.0), (0.0, 1.0), ПУСТО); {Разрешается ввод данных с логического устройства ввода числа номер 1 в режиме опроса}
ЗАДАТЬ РЕЖИМ УСТРОЙСТВА ВВОДА ЧИСЛА (УОЭЛТ, 1, ОПРОС. ЭХО); {Разрешается ввод данных с логического устройства ввода числа номер 2 в режиме опроса}
ЗАДАТЬ РЕЖИМ УСТРОЙСТВА ВВОДА ЧИСЛА (УОЭЛТ. 2, ОПРОС, ЭХО); {Разрешается ввод позиций в .режиме опроса}
ЗАДАТЬ РЕЖИМ УСТРОЙСТВА ВВОДА ПОЗИЦИИ (УОЭЛТ. 1, ОПРОС, ЭХО);
{Для того, чтобы можно было указать конец преобразований или завершение создания картины, разрешается ввод данных выбора альтернативы в режиме обработки событий}
ЗАДАТЬ РЕЖИМ ВЫБОРА (УОЭЛТ, 1, СОБЫТИЕ, ЭХО);
{Преобразование сегмента с именем, заданным переменной}
ИМЯ СЕГМЕНТА
{Подготавливается матрица преобразований}
СФОРМУЛИРОВАТЬ МАТРИЦУ ПРЕОБРАЗОВАНИИ ((0.0), (0.0), 0, (1.1), МК, МАТРИЦА);
REPEAT
{Коэффициент маштабирования}
ОПРОСИТЬ УСТРОЙСТВО ВВОДА ЧИСЛА (УОЭЛТ, 1, МАСШТАБ);
{Угол поворота}
ОПРОСИТЬ УСТРОЙСТВО ВВОДА ЧИСЛА (УОЭЛТ, 2, УГОЛ);
{Точка, в которую будет передвигаться сегмент}
ОПРОСИТЬ УСТРОЙСТВО ВВОДА ПОЗИЦИИ (УОЭЛТ, 1, НОМЕР ПРЕОБРАЗОВАНИЯ 2, ТОЧКА 2);
IF НОМЕР ПРЕОБРАЗОВАНИЯ 1 = НОМЕР ПРЕОБРАЗОВАНИЯ 2
THEN GO ТО КОНЕЦ ПИКЛА;
{Перемножаются матрицы преобразований}
ВЫЧИСЛИТЬ РЕЗУЛЬТИРУЮЩУЮ МАТРИЦУ ПРЕОБРАЗОВАНИЙ (МАТРИЦА, ТОЧКА 1, ТОЧКА 2 ТОЧКА 1 УГОЛ, (МАСШТАБ, МАСШТАБ) МК, МАТРИЦА ИТОГ);
{Сегмент, имя которго задано переменной ИМЯ СЕГМЕНТА, масштабируется с использованием коэффициентов масштабирования по X и Y направлениям, заданным переменной МАСШТАБ, относительно точки, заданной параметром ТОЧКА 1, поворачивается на угол, заданный параметром УГОЛ, относительно точки, заданной параметром ТОЧКА 1, и, наконец, сдвигается из точки, заданной параметром ТОЧКА 1, в точку, заданную параметром ТОЧКА 2}
ЗАДАТЬ ПРЕОБРАЗОВАНИЕ СЕГМЕНТА (ИМЯ СЕГМЕНТА, МАТРИЦА ИТОГ);
ВРЕМЯ ОЖИДАНИЯ: 0;
{Осуществляется проверка: имеются входные данные выбора альтернативы или нет}
ОЖИДАТЬ СОБЫТИЕ (ВРЕМЯ ОЖИДАНИЯ PC, КЛАСС, НОМЕР ЛУВ);
{Преобразование сегмента закончено, если имеются входные данные устройства выбора}
UNTIL КЛАСС-ВЫБОР;
КОНЕЦ ЦИКЛА;
{Прекращается ввод данных с логического устройства ввода числа номер 1 в режиме опроса}
ЗАДАТЬ РЕЖИМ ВВОДА ЧИСЛА (УОЭЛТ, 1, ЗАПРОС, ЭХО);
{Прекращается ввод данных с логического устройства ввода числа номер 2 в режиме опроса}
ЗАДАТЬ РЕЖИМ УСТРОЙСТВА ВВОДА ЧИСЛА (УОЭЛТ, 2, ЗАПРОС, ЭХО); {Прекращается ввод позиций в режиме опроса}
ЗАДАТЬ РЕЖИМ УСТРОЙСТВА ВВОДА ПОЗИЦИЙ (УОЭЛТ, 1, ЗАПРОС, ЭХО);
{Преобразованный сегмент выводится на графопостроитель}
ВЫВЕСТИ СЕГМЕНТ НА СТАНЦИЮ (ГП, ИМЯ СЕГМЕНТА);
ПОЛУЧИТЬ АЛЬТЕРНАТИВУ (СОСТОЯНИЕ ВЫБОРА, АЛЬТЕРНАТИВА);
{Прекращается ввод альтернатив в режиме обработки событий}
УСТАНОВИТЬ РЕЖИМ ВЫБОРА (УОЭЛТ, 1, ЗАПРОС, ЭХО);
{Значение параметра АЛЬТЕРНАТИВА, равное 2, указывает на завершение создания картины}
UNTIL АЛЬТЕРНАТИВА = 2 AND СОСТОЯНИЕ ВЫБОРА = ДА ДЕАКТИВИРОВАТЬ РАБОЧУЮ СТАНЦИЮ (УОЭЛТ);
ЗАКРЫТЬ СТАНЦИЮ (УОЭЛТ);
ЗАКРЫТЬ СТАНЦИЮ (ОПС Г);
ЗАКРЫТЬ ЯГС;
В гримере 4 с помощью интерактивной станции генерируется многоугольник, который затем модифицируется в интерактивном режиме и вычерчивается на графопостроителе.
Пример 4.
{Определения и объявления опущены}
ОТКРЫТЬ ЯГС;
ОТКРЫТЬ СТАНЦИЮ (УОЭЛТ, УОЭЛТДД, 3);
АКТИВИРОВАТЬ СТАНЦИЮ (УОЭЛТ);
ОТКРЫТЬ СТАНЦИЮ (ПСЕГ, СЕГДД, ОПС);
АКТИВИРОВАТЬ СТАНЦИЮ (ПСЕГ);
{Устанавливается преобразование нормирования}
ЗАДАТЬ ОКНО (1, ГРАНИЦЫ ОКНА);
ЗАДАТЬ ПОЛЕ ВЫВОДА (1, ГРАНИЦЫ ПОЛЯ);
ЗАДАТЬ ВХОДНОЙ ПРИОРИТЕТ ПОЛЯ ВЫВОДА (1,0, ВЫШЕ);.
{Конструирование сегмента с именем МНОГОУГОЛЬНИК}
СОЗДАТЬ СЕГМЕНТ (МНОГОУГОЛЬНИК);
ЗАДАТЬ ИНДЕКС ЛОМАНОЙ (3);
НОМЕР ТОЧКИ: =1;
ЗАПРОСИТЬ УСТРОЙСТВО ВВОДА ПОЗИЦИИ (УОЭЛТ, 1, СОСТОЯНИЕ, ПРЕОБРАЗОВАНИЕ 1, Т [1]);
ВЫБРАТЬ ПРЕОБРАЗОВАНИЕ НОРМИРОВАНИЯ (ПРЕОБРАЗОВАНИЕ 1);
REPEAT
НОМЕР ТОЧКИ: = НОМЕР ТОЧКИ -Н;
ЗАПРОСИТЬ УСТРОЙСТВО ВВОДА ПОЗИЦИИ (УОЭЛТ, 1, СОСТОЯНИЕ, ПРЕОБРАЗОВАНИЕ, Т [НОМЕР ТОЧКИ]);
UNTIL СОСТОЯНИЕ = ОТБОЙ OR ПРЕОБРАЗОВАНИЕ-ПРЕОБРАЗОВА
НИЕ 1;
Т [НОМЕР ТОЧКИ]: = Т [1];
ЛОМАНАЯ (НОМЕР ТОЧКИ, Т);
ЗАКРЫТЬ СЕГМЕНТ;
{Подготавливается матрица преобразований}
СФОРМИРОВАТЬ МАТРИЦУ ПРЕОБРАЗОВАНИИ (0.0), (0.0), 0, (1.1), МК,
МАТРИЦА);
REPEAT
ЗАПРОСИТЬ УСТРОЙСТВО ВЫБОРА (УОЭЛТ, 1, СОСТОЯНИЕ, ВЫБОР);
IF СОСТОЯНИЕ = ОТБОИ OR СОСТОЯНИЕ = НЕТ ВЫБОРА GO ТО КО
НЕЦ ЦИКЛА;
CASE ВЫБОР OF
{Сдвиг многоугольника в заданную позицию}
СДВИГ: BEGIN
ЗАПРОСИТЬ УСТРОЙСТВО ВВОДА ПОЗИЦИИ (УОЭЛТ, 1, СОСТОЯНИЕ,.
ПРЕОБРАЗОВАНИЕ 2, Т1);
IF СОСТОЯНИЕ = ОТБОЙ GO ТО КОНЕЦ ЦИКЛА;
ЗАПРОСИТЬ УСТРОЙСТВО ВВОДА ПОЗИЦИИ (УОЭЛТ, '1, СОСТОЯНИЕ, ПРЕОБРАЗОВАНИЕ 2, Т2);
IF СОСТОЯНИЕ = ОТБОИ OR ПРЕОБРАЗОВАНИЕ = ПРЕОБРАЗОВА
НИЕ 2, GO ТО КОНЕЦ ЦИКЛА;
ВЫБРАТЬ ПРЕОБРАЗОВАНИЕ НОРМИРОВАНИЯ (ПРЕОБРАЗОВАНИЕ 2);
ВЫЧИСЛИТЬ РЕЗУЛЬТИРУЮЩУЮ МАТРИЦУ ПРЕОБРАЗОВАНИИ
(МАТРИЦА, (0.0), Т2>—Т1, 0, (1. 1), МК, МАТРИЦА ИТОГ);
ЗАДАТЬ ПРЕОБРАЗОВАНИЕ СЕГМЕНТА (МНОГОУГОЛЬНИК, МАТРИЦА ИТОГ);
END;
• (Масштабирование многоугольника)
УВЕЛИЧЕНИЕ: BEGIN
END:
(Поворот многоугольника) поворот: BEGIN
END;
ELSE;
ENDCASE;
ОБНОВИТЬ ИЗОБРАЖЕНИЕ НА СТАНЦИИ (УОЛТ, ВЫПОЛНИТЬ);
UNTIL ВЫБОР = СДВИГ, УВЕЛИЧЕНИЕ, ПОВОРОТ;
(Многоугольник выводится на графопостроитель) ДЕАКТИВИРОВАТЬ СТАНЦИЮ (УОЭЛТ);
ДЕАКТИВИРОВАТЬ СТАНЦИЮ (ПСЕГ);
ОТКРЫТЬ СТАНЦИЮ (ГП, ГПДД, ГПЧПЕРА);
АКТИВИРОВАТЬ СТАНЦИЮ (ГП);
(Задаются представления примитивов для станции)
ЗАДАТЬ ПРЕДСТАВЛЕНИЕ ЦВЕТА (ГП, ЦВЕТ 1, (1, 0, 0));
ЗАДАТЬ ПРЕДСТАВЛЕНИЕ ЛОМАНОЙ (ГП, З, 1, 1.5, ЦВЕТ 1);
ЗАДАТЬ ПРЕДСТАВЛЕНИЕ ТЕКСТА (ГП, 2, 1, 0, ЦВЕТ 1);
ЗАДАТЬ ПОЛЕ ВЫВОДА СТАНЦИИ (ГП, 0, РХ, 0, PY);
ВЫВЕСТИ СЕГМЕНТ НА СТАНЦИЮ (ГП, МНОГОУГОЛЬНИК);
ЗАДАТЬ ИНДЕКС ТЕКСТА (2);
ЗАДАТЬ ВЫСОТУ ЛИТЕРЫ (0.1);
ТЕКСТД(0.5, 0.5), «ЭТО МНОГОУГОЛЬНИК»);
ДЕАКТИВИРОВАТЬ СТАНЦИЮ (ГП);
ЗАКРЫТЬ СТАНЦИЮ (ГП);
•ЗАКРЫТЬ СТАНЦИЮ (УОЭЛТ);
ЗАКРЫТЬ СТАНЦИЮ (ПСЕГ);
ЗАКРЫТЬ ЯГС;
S примере 5 в пакетном режиме считываются команды из произвольного •файла входных данных и генерируется картина на графопостроителе. Считываемые команды задают типы графических символов, например, транзисторы, резисторы. емкости и позиции, в которых должны размещаться эти символы. Сначала графическое представление символов считывается из метафайла и помещаете": в память сегментов, затем интерпретируются команды и графические символы посылаются в рабочую станцию для графопостроителя с помощью функции ВСТАВИТЬ СЕГМЕНТ. Символы представлены в метафайле примитивами. сгруппированными в сегменты.
Пример 5.
(О.:;?г ".сипя и объявления опущены)
ОТКРЫТЬ ЯГС;
ОТКРЫТЬ СТАНЦИЮ (МЯГС ВВ, ФАЙЛ 1, МЯГС ВВОДА);
ОТКРЫТЬ СТАНЦИЮ (ПСЕГ, ПСДД, ОПС);
АКТИВИРОВАТЬ СТАНЦИЮ (ПСЕГ);
' REPEAT
ПОЛУЧИТЬ ТИП ЗАПИСИ ИЗ МЯГС (МЯГС ВВ, ТИП ЗАПИСИ, ДЛИНА ЗАПИСИ);
ПРОЧИТАТЬ ЗАПИСЬ ИЗ МЯГС (МЯГС ВВ, ДЛИНА МАССИВА, МАССИВ);
UNTIL ТИП ЗАПИСИ = КОНЕЦ ФАЙЛА;
ИНТЕРПРЕТИРОВАТЬ ЗАПИСЬ (МЯГС ВВ, ТИП ЗАПИСИ, ДЛИНА МАССИВА, МАССИВ);
ДЕАКТИВИРОВАТЬ СТАНЦИЮ (ПСЕГ);
{Открывается и активируется станция для графопостроителя}
ОТКРЫТЬ СТАНЦИЮ (ГП, ГПДД, ПЛАНШЕТНЫЙ ГП);