Содержание

Переносим код из Турбо Паскаля

Перенос программ из Турбо Паскаля (графики, Turbo Vision и т.д.) в 32-битные компиляторы.

Здесь будет описание того, как портировать код со старых ТР7 программ в новые компиляторы.

Общие рекомендации:

Чтобы программы переносились легко, надо

Вопросы и ответы

Вопрос:
Как правильно портировать переменные процедурного типа из TP7 в TMT? Какие могут быть ошибки?

var pp:procedure(var x,y:integer);
 
procedure pp1(var x,y:integer);far;
begin
 
end;
 
begin
pp:=pp1;
end.

Ответ:
Вообще-то и так работать будет, но far писать излишне. Да, еще: при вызове процедур не стоит забывать никакие параметры, а то может откомпилироваться, но работать неправильно.


Вопрос:
А что делать, если в программе используется Turbo Vision?

Ответ:
Его поддерживают следующие компиляторы:

Особенности компиляторов

Free Pascal

Для совместимости с Турбо Паскалем нужно включить директиву {$MODE TP}. Если вы её не включите, компилятор будет считать тип integer как longint (одна из его особенностей) и тому подобное.

Есть демо-программы из поставки с компилятором, которые не скомпилируются и вы сразу начнёте проклинать создателей компилятора. И зря. Некоторым программам следует добавить вначале вышеупомянутую директиву {$MODE TP}, если программу спортировали из Турбо Паскаля. Другим - директиву {$MODE DELPHI}, если программу спортировали из Дельфи.

Подробности тут: $MODE : установить режим совместимости для компилятора

В TP7 часто использовал у строки нулевой элемент для определения длины.

var
 s:string;
begin
 writeln(ORD(s[o])) {вывести текущую длину строки s}
end.

или

var
 s:string;
 a: byte absolute s;
begin
 s:= 'string value';
 writeln(a) {вывести текущую длину строки s}
end.

В FPC и в Virtual Pascal этот трюк не проходит. Нужно использовать функцию length.

Пример получения длины строки в Virtual Pascal:

var
 s:string;
begin
 writeln(length(s)) {вывести текущую длину строки s}
end.

Кроме того, в Virual Pascal замечена не корректная обработка абсолютных переменных.

TMT Pascal

Ассемблер