Блог → Кое-что о макроязыке GML (Graphics Macro Language)

Для дальнейшего расширения возможностей, которые предоставлялись ранее разобранными средствами машинной графики, был дополнительно разработан и внедрён специальный макроязык, который получил название GML (аббривеатура от англ. Graphics Macro Language). Этот язык весьма удобен, и позволяет в очень изящной и компактной форме, кодировать любые фигуры и быстро выводить их на экран, в любом из требуемых масштабов и различных ориентациях. Что же это за язык? Давайте познакомимся с ним подробнее!

Каждая команда макроязыка GML представляется одиночной ключевой буквой, за которой следует один или два числовых параметра (они, как правило, задаются целыми числами). В основном команды GML предназначаются для перемещения курсора из одних точек экрана в другие, с одновременным вычерчиванием соединяющих их отрезков (согласитель, описание очень напоминает PostScript). Они могут модифицироваться следующим образом:
- Перед командой "движения" ставится параметр В. Тогда положение курсора изменяется, но линия не рисуется.
- Перед командой "движения" ставится параметр N. Тогда курсор возвращается на место, которое он занимал до выполнения данной команды.

Там, где в команде GML в качестве параметров используются целые числа, можно указывать и числовые переменные γ, в том числе - элементы массивов, но при этом следует записывать в форме =γ;. Ниже приведены некоторые примеры команд языка GML:



Для приведения в действие последовательности команд GML необходимо сделать её значением некоторого строкового выражения β и затем воспользоваться командой DRAW (от англ. draw - чертить, рисовать):

DRAW β


Как правило, β является константой. Выполнение этой команды состоит в последовательном выделении из значения β команд GML, и последующей реализации предписываемых ими операций. Длина β не должна превосходить 255 байтов, однако имеется довольно простой и понятный механизм "вложения" одних значений в другие. Фактически, в β можно вставлять команду обращения к другой серии команд GML. Записывается она так: Хα; (обратите внимание, что знак ";" обязателен). Выполнение этой команды активизирует подпрограмму на GML, являющуюся значением строкового выражения α. Возврат осуществляется к команде, следующей за Хα;, при этом допускаются многоуровневые обращения типа Хα;, т.е. из α можно обратиться к некоторой третьей подпрограмме и т.д.

Замечу, что если не предполагается масштабировать выводимую фигуру или поворачивать её вокруг некой начальной точки, то всё равно есть смысл указать в DRAW команды S4A0. Это позволит отменить возможные предыдущие назначения Sm и At, которые (потенциально) могут исказить ваше изображение. Далее, чтобы текст на GML легко читался и корректировался, рекомендуется отделять его команды в β пробелами, на выполнении команды DRAW это никак не отразится.

Схемы, графики, рисунки или отдельные их фрагменты, выводимые на графические экраны, обычно нуждаются в обозначениях и поясняющих сообщениях. При этом, сформировать их обычным оператором PRINT невозможно (на экранах 2 и 3 он не действует). Можно было бы буквы рисовать командой DRAW, но согласитесь - это весьма трудоёмко. Надписи в программе "базовые структуры" формировались так, как это демонстрирует следующий фрагмент. Этот способ позволяет выводить символы фиксированного формата в блоках 8x8 точек. Другой прием вывода символов алфавита на графический экран, позволяющий регулировать как размер букв, так и расстояние между ними, я покажу чуть позже.

10 COLOR 1,15,8:SCREEN 2
20 OPEN "GRP:" AS #1
30 PSET (100,100),15
40 PRINT #1, "пример"
50 GOTO 50


Разработка программы "Базовые структуры" является простейшим педагогическим программным средством, которое с успехом может быть использовано преподавателем при объяснении соответствующей темы по информатике. Программная реализация подобных разработок не очень сложна, но требует значительных временных затрат. Это связано с недостаточностью инструментальных средств Бейсика для эффективного проектировании изображения непосредственно на экране дисплея. Тут также стоит заметить, что многие школьники и студенты в качестве первой попытки создать "большую" и интересную программу, с удовольствием (и зачастую, небезуспешно) берутся за разработку и реализацию той или иной версии "Графического редактора", позволяющего облегчить проектирование информационных кадров для обучающих систем.

Что можно сказать о выводе алфавита на графическом экране? Допустим, что α - стандартный алфавит Бейсика. Один из способов оформления графиков и чертежей надписями из символов α уже демонстрировался выше. При необходимости работы с символами различных форматов или с наборами знаков не совпадающих с подмножествами α, используется немного другой приём. Суть его состоит в том, что заранее заготавливаются строковые константы, значениями которых являются тексты на GML "новых" знаков, которые могут быть любыми фрагментами произвольных изображений. Далее, каким-либо способом эти "новые" знаки кодируются элементами α и выводятся на экран заданием соответствующего кода.