СПО в российских школах

Команда ALT Linux рассказывает о внедрении свободного программного обеспечения в школах России
Январь 25, 2011

Free Pascal и DOS графика в Linux

Методические материалы
Автор: Владимир Черный

Совсем недавно ALT Linux анонсировал новую электронную версию Альт Линукс 5.0.2 Школьный. В этой статье я хочу обратить внимание на одну весьма полезную возможность, добавленную в эту сборку. А именно, теперь любую программу на Паскале написанную для DOS с использованием egavga.bgi можно легко и просто (чуть поправив, конечно) запустить под Linux.

Автор дальнейшего текста Георгий Курячий.
В Сизифе (в p5 — начиная с 5.0.2) есть модуль для FreePascal, позволяющий использовать графические примитивы в стиле Turbo Pascal BGI. Пакет с модулями называется fpc-units-ptcpas, соответствующий модуль — PTCGraph.

Адаптация BGI-графики для FreePascal

  1. Установить пакет fpc-units-ptcpas-demos. Он должен вытянуть все нужные зависимости; кроме того, примеры оттуда можно запустить и/или пересобрать путём копирования всего каталога и запуска в нём команд make clean и make.
  2. Поменять в исходном тексте программы названия модулей Graph и Crt на PTCGraph и PTCCrt соответственно. Не стоит забывать, что названия модулей могут применяться не только в операторе Uses, но и при обращении к содержимому модуля. Использование модуля Crt или стандартного ввода (например, ReadLn;) приведёт к тому, что ввод и вывод будет происходить из окна терминала (или вообще неизвестно откуда, если запускать программу не из терминала), а не из окна с графикой.
  3. Модифицировать исходные тексты так, чтобы в них не использовались определённые значения переменных GraphDriver и GraphMode. Привязка к BGI-каталогу или BGI-файлу PTCGraph-ом игнорируется.
  4. Проверить, насколько приемлемо используются в исходниках цвета и размеры экрана.

Примеры (Turbo Pascal 7.1)

В файле EXAMPLES/BGI/BGIDEMO.PAS
Достаточно заменить
uses
Crt, Dos, Graph;

на
uses
PTCCrt, Dos, PTCGraph;

В файле EXAMPLES/BGI/ARTY.PAS
Сверх того надо заменить
Graph.Line(x1,y1,x2,y2);
на
PTCGraph.Line(x1,y1,x2,y2);
и в оператор
case GraphDriver of
добавить перед закрывающим его end; задание по умолчанию переменной MaxDelta:
else MaxDelta := 16;

В примерах из помощи (например, по процедуре Circle)

По умолчанию графика рисуется синим, а не белым цветом, причём в левом верхнем углу (см. замечание 4), а окончание ввода по ReadLn; ожидается в терминале (см. замечание 3). Рекомендуется вместо автоопределения драйвера
Gd:=Detect;
InitGraph(Gd, Gm, ' ');

использовать явное задание VGA-совместимого оконного режима
Gd:=VGA;
InitGraph(Gd, Gm, ' ');

а вместо использования
. . .
ReadLn;

для задержки ввода пользоваться
Uses PTCCrt
. . .

ReadKey;

Посмотрите на картинки — вы их узнаете?! Да, это bgidemo :)



Оставьте комментарий