bash.im ithappens.me zadolba.li
9731

Старьё моё

16 августа 2012, 07:15

Понадобилось недавно написать для студента небольшую программу на Паскале. Программа простейшая — переход в графический режим, построение графика функции, вывод таблицы значений. На Windows 7 x64 Паскаль, разумеется, не запустится, да и от версии х86 толку бы не было — там отсутствует возможность работы в графическом режиме.

Итак, попытка номер раз — FreePascal. Пишем привычный код для инициализации графического режима и ожидания нажатия любой клавиши. Оказалось, что это дело во FreePascal организовано более чем интересно: открывается отдельное окно для графики, но все сообщения от клавиатуры принимает другое окно, с консолью. Приложение по нажатии любой клавиши просто так не закрывается, только после ручного переключения на окно консоли. Гугление даёт решение проблемы: собрать программу с ключом APPTYPE: GUI, подключить WinCRT и вызвать ShowWindow. В общем и целом под Borland Pascal это гарантированно не соберётся, а необходима совместимость. Отпадает.

Попытка номер два. Для совместимости со старыми приложениями я использую виртуальную Windows XP. Вот и сейчас на виртуалке стоит новенькая «хрюша» со всеми обновлениями. Копирую весь пакет Turbo Pascal, который предусмотрительно имеется, запускаю bp.exe, открываю исходник, запускаю. Приложение закрывается: отвалился эмулятор ntvdm.exe. Я привык: как Windows XP ни ставь, где-нибудь в конце концов да вылезет глюк, но тем не менее. В ходе экспериментов выяснилось, что отваливается при любой попытке перейти в графический режим, а также просто на запуске turbo.exe. Переустанавливать виртуальную машину на тот момент не было ни времени, ни желания. Решил пойти другим путём.

Итак, попытка номер три. Хвалёный многими DOSBox. Много слышал о нём, но использовать не доводилось. Включаем, монтируем в качестве диска С: папку с Паскалем, запускаем bp.exe, открываем исходик и привычно нажимаем Ctrl+F9. Программа закрывается. Полностью. Путём курения манов устанавливаем, что в DOSBox это сочетание клавиш действительно поставлено на закрытие. Кому пришло в голову назначить для эмулятора такие простые сочетания, когда все они используются многими досовскими программами, неясно, но на то он и опенсорц. Ладно, убираем это сочетание из настроек DOSBox, запускаем — графика работает. Вносим изменения в исходник, чтобы доделать-таки эту несчастную задачу. Вносим… А они не вносятся, ибо Паскаль реагирует только на пробел и на клавиши со стрелками. Закрываем Паскаль, в консоли DOSBox — тот же глюк. Нажатия клавиш Backspace и Del вызывают появление на экране символов из набора DOS. Закрываем DOSBox, открываем, монтируем, запускаем — проблема исчезает, но появляется после следующего запуска написанной программы. В результате отладка идёт именно так: запускаем, выходим, закрываем эмулятор, открываем эмулятор, монтируем, запускаем, пишем…

В итоге всё получилось, благо задача была простейшей, но ощущение, что пора бы уже преподавателям переходить на что-нибудь более современное, не покидает меня до сих пор.