Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > 32-битные компиляторы > Переносим код из Турбо Паскаля


Автор: Romtek 25.10.04, 21:12
Народ, давайте писать здесь о том, как портировать код со старых ТР7 программ в новые компиляторы.
  • Как использовать графику
  • Адаптация типов данных
  • и другое

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: KiRiK 26.10.04, 04:11
А встроенный ассемблерный код? У меня именно с этим проблемы и есть. :wacko: :rolleyes:

Добавлено
Могу писАть про ТМТ.. Так и сделаю. ;)

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: KiRiK 26.10.04, 14:29
Напишу немного про TMT Graph.
Сразу кину ссылочку.. Загляните, посмотрите. Там все подробно.

Основные отличия от родственного 16битного Grapha.

1. Инициализация графики.
Вместо InitGraph делаем так:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SetSVGAMode(XRes, YRes, BPP, VMode: Word)

xRes и yRes - разрешение экрана, варируется от 640х480 до 1600х1200.
BPP - глубина цвета, т.е. 2 в BPP степени цветов у вас будет
VMode может принимать следующие значения в дипазоне [1..3]:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     
        Константа   Значение   Пояснение
        LFBorBanked 0          Установить режим LFB или с переключением банков
        BankedOnly  1          Установить режим только с переключением банков
        LFBOnly     2          Установить только LFB режим

Выход далается любимым
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GloseGraph
.

2. Картинки, т.е. спрайты. Вроде, ничего особа не изменилось. Но если интересно, то можно заглянуть:
Работа с картинками ;)

3. Есть такая вещь, как
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SetWriteMode(WriteMode: DWord)
, она "Устанавливает режим записи при рисовании линии., ...оказывает воздействие на результат вывода следующих процедур: DrawPoly, Line, Spline, LineRel, LineTo, Rectangle, Circle, Ellipse, Bar3D, Putpixel, PutSprite и PutImage".
Узнать что у вас установлено можно с помощью
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GetWriteMode
.

4. А еще
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SetTranspMode(Mode: Boolean; Color: DWord)

Если выставить Mode в True, то цвет Color при использовании PutPixel, PutSprite и PutImage не будет выводиться. Если Mode = False, то все цвета работить будут.
Опять же, что установлено можно узнать, используйте
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GetTranspSettings (var Mode: Boolean; Color: DWord)
.

5. Вроде, в 16битном не было
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SetFillColor (Color: DWord)
, которая устанавливает закрашивание сплошным цветом Color. Ну и
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SetFillStyle(Pattern: DWord; Color: DWord)
сюде же, только в зтой процедуре можно установить pattern по следующим константам:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     
        Константа      Значение Пояснение
        EmptyFill      0        не заливаем
        SolidFill      1        заливаем вплошным цветом
        LineFill       2        ---
        LtSlashFill    3        ///
        SlashFill      4        ///
        BkSlashFill    5        \\\
        LtBkSlashFill  6        \\\
        HatchFill      7        крестик
        XHatchFill     8        крестик
        InterleaveFill 9        чередующиеся линии
        WideDotFill    10       точки
        CloseDotFill   11       точки
        UserFill       12       определяется пользователем

6. А теперь вспомним, что количество поддерживаемых цветов уже не 256! :)
Это влияет не только на тип номера цвета. По этому поводу очень полезны подпрограмки
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    RGBColor(R, G, B: Byte)
, которая по компонентам RGB заданного цвета возвращает его номер, и
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    AnalizeRGB (Color: Dword; var R,G,B: Byte)
, которая делает противоположное, т.е. по номеру цвета возвращает его RGB составляющие.

Это все основное, что, с моей точки зрения, знать надо. Остальное есть по ранее указанной ссылке.

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: AVA12 26.10.04, 19:12
KiRiK, а какие могут быть проблемы с ассемблером ??? :)

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: KiRiK 26.10.04, 19:19
Какие-какие, ну нельзя же его влоб портировать, правильно. Ведь был 16биный, а сталь 32х. А я 32битных регистров не знаю. :unsure: Увы.

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: AVA12 27.10.04, 00:26
KiRiK, тут все просто: если не знаешь 32-хбитных регистров, можешь пользоваться 16-тибитными, главное помнить:

1) указатели как были, так и остались 32-хбитными, только вместо сегмента - старшие 16 бит смещения (указатели стали ближними!); сегментные регистры не используются (в смысле - не изменяются), используется модель памяти flat (тот же tiny, только больше :);

2) кстати: НЕ ТРОГАЙ СЕГМЕНТНЫЕ РЕГИСТРЫ! просто имей в виду, что DS=ES=FS=GS=SS;

3) на вершину стека указывает не 16-тибитный SP, а 32-хбитный ESP;

4) где раньше неявно использовались 16-тибитные регистры (SI/DI/CX в строковых операциях, CX в LOOP-е, BX в XLAT, BP/SP в LEAVE и т. п.), теперь используются 32-хбитные, например:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    { записать ярко-зеленый восклицательный знак по указанному адресу в видеобуфере }
     
    { was: 16 bit }
     
    procedure PutExcl(where: pointer); assembler;
    asm
        les di,where    { ES:DI }
        mov ax,0A21h
        stosw
    end;
     
    { is: 32 bit }
     
    procedure PutExcl(where: pointer); assembler;
    asm
        mov edi,where   { EDI }
        mov ax,0A21h
        stosw
    end;


5) вместо PUSHF/POPF, PUSHA/POPA следует использовать PUSHFD/POPFD, PUSHAD/POPAD чтобы класть в стек или снимать с него 32-хбитные регистры; также следует использовать RETFD/IRETD вместо RETF/IRET, но эти команды теперь не требуются;

6) кстати, на всякий случай: дальние процедуры/функции не используются, теперь они все - ближние!

7) и самое главное, на всякий случай: если не вполне понимаешь, что делает программа - НЕ ПОРТИРУЙ ЕЕ! (впрочем, это очевидно :)

Но этот способ портирования неэффективен, некрасив и неинтересен. Лучше пойти другим путем - переписать код в 32-хбитных инструкциях. Следует помнить следующее:

8) к 16-тибитным регистрам общего назначения (и к IP и FLAGS) добавилось 16 бит сверху и буковка "E" слева :), т. е. получились EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, EIP, EFLAGS. При этом 16-разрядные "предки" стали неотъемлемой частью 32-хбитных "потомков", пример:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        xor eax,eax     { EAX := 0 }
        mov ax,0ABCDh   { EAX := 0000ABCDh }
        shl eax,4       { EAX := 000ABCD0h }
        sar ax,4        { EAX := 000AFBCDh }
        rol ah,4        { EAX := 000ABFCDh }


9) все команды работают с 32-хбитными операндами так же, как и с 16-тибитными, нужно только подставить везде буковку "E" и заменить word на dword; я имею в виду следующее:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    { 16 bit }
        cwd         { DX:AX := AX (signed) }
        mov bx,some_var { word ptr }
        idiv    bx      { AX := DX:AX div BX }
                    { DX := DX:AX mod BX }

переделываешь в
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    { 32 bit }
        cdq         { EDX:EAX := EAX (signed) }
        mov ebx,some_var{ dword ptr }
        idiv    ebx     { EAX := EDX:EAX div EBX }
                    { EDX := EDX:EAX mod EBX }


10) команды PUSHxx/POPxx теперь работают с двойными словами (и вообще, везде, где раньше было слово - теперь два :)

11) появились весьма полезные 32-хбитные команды, вот некоторые из них:
CWDE: EAX := AX (со знаком)
CQD: EDX:EAX := EAX (со знаком)

32-хбитные строковые операции: LODSD, STOSD, SCASD, CMPSD, MOVSD, INSD, OUTSD, используется EAX вместо AX,
ESI/EDI +-= 4; REP/REPE/REPZ/REPNE/REPNZ используют ECX вместо CX

список далеко :) не полный, если хочешь узнать больше - RTFM :)

12) адресация: теперь смещения могут быть размером в 1 или 4 байта; можно использовать любые 32-хбитные регистры общего назначения (до двух регистров); один из используемых регистров (кроме ESP) можно умножать (без последствий :) на 2, 4 или 8, например:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        mov eax,PointerList[edx + eax*4]


В остальном, вроде бы, без изменений (я имею в виду - при портировании :)

P. S. А вообще - RTFM (Хайда, Зубкова, Юрова...).

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: KiRiK 27.10.04, 08:24
AVA12, пасиба, расписал. ;)
Хотя пока и не очень понятно, но если нужно будет, то теперь разберусь. Просто пока еще не возникало большой необходимости в портировании ассемблера, но было интересно понять какая зависимость мужду 16ти и 32х битными регистрами.

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: Romtek 27.10.04, 10:30
Хорошо. То, что касается встроенного ассемблера - вроде, разобрались.
Теперь давайте и о Паскале поговорим. :)

Добавлено
Цитата KiRiK @ 26.10.04, 18:29
5. Вроде, в 16битном не было
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SetFillColor (Color: DWord)
, которая устанавливает закрашивание сплошным цветом Color. Ну и
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SetFillStyle(Pattern: DWord; Color: DWord)
сюде же, только в зтой процедуре можно установить pattern по следующим константам:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     
        Константа      Значение Пояснение
        EmptyFill      0        не заливаем
        SolidFill      1        заливаем вплошным цветом
        LineFill       2        ---
        LtSlashFill    3        ///
        SlashFill      4        ///
        BkSlashFill    5        \\\
        LtBkSlashFill  6        \\\
        HatchFill      7        крестик
        XHatchFill     8        крестик
        InterleaveFill 9        чередующиеся линии
        WideDotFill    10       точки
        CloseDotFill   11       точки
        UserFill       12       определяется пользователем

А по-моему, было.

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: Vesper 27.10.04, 10:57
насчет графики: в ТМТ появилась такая процедура - SetVirtualMode(var p:pointer) которая перенаправляет весь вывод на экран (при установленном граф.режиме) в буфер памяти, размер которого - одно окно (getpagesize), этот буфер предварительно нужно выделить getmem'ом. После ее вызова изображение на экране обновляться не будет до вызова fliptoscreen(p), где p - переменная, содержащая экран (либо та, которая была использована в вызове setvirtualmode, либо еще какая-нибудь такого же размера, в которую был загружен образ экрана откуда-то еще). Возврат к нормальному режиму - SetNormalMode.
Также есть процедура снятия скриншота - FlipToMemory(p).

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: KiRiK 27.10.04, 13:30
Цитата Romtek, 27.10.04, 13:30
А по-моему, было.

SetFillStyle был,
SetFillColor не было.

Цитата Vesper, 27.10.04, 13:57
насчет графики: в ТМТ появилась такая процедура - SetVirtualMode(var p:pointer) которая перенаправляет весь вывод на экран (при установленном граф.режиме) в буфер памяти, размер которого - одно окно (getpagesize), этот буфер предварительно нужно выделить getmem'ом. После ее вызова изображение на экране обновляться не будет до вызова fliptoscreen(p), где p - переменная, содержащая экран (либо та, которая была использована в вызове setvirtualmode, либо еще какая-нибудь такого же размера, в которую был загружен образ экрана откуда-то еще). Возврат к нормальному режиму - SetNormalMode.
Также есть процедура снятия скриншота - FlipToMemory(p).


Не работает в бесплатном ТМТ. Увы.

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: Some1 27.10.04, 15:03
Цитата KiRiK, 27.10.04, 16:30
Не работает в бесплатном ТМТ. Увы.

С чего ты взял? у меня работает к примеру 3.9lite

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: KiRiK 27.10.04, 15:24
Да?! Здорово! Надо будет проверить.
У меня в ТМТ 3.5. не пашет, да и в мануале так написано...

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: Pavia 27.10.04, 15:46
Как правельно партировать переменные процедурного типа из TP7 в TMT.Какие могут быть ошибки?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    var pp:procedure(var x,y:integer);
     
    procedure pp1(var x,y:integer);far;
    begin
     
    end;
     
    begin
    pp:=pp1;
    end.

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: KiRiK 27.10.04, 16:04
Вообщето и так работать будет, но far излишне.

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

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: Romtek 31.10.04, 22:35
Графика в FPC, модуль Graph :

Есть небольшие поправки в программах, написанных для Турбо Паскаля, хотя всё остаётся прежним.

Чтобы миновать консольное окно, нужно указать вначале программы (перед Uses)
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    {$ifdef Win32}
     {$apptype GUI}
    {$endif}

Теперь в разделе Uses :
CRT надо заменить на WinCrt, хотя лучше вообще удалить, если не используются функции KeyPressed, ReadKey.
Windows - добавить, т.к будет использоваться дальше.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    uses
    {$ifdef Win32}
      WinCrt,
      Windows,
    {$endif}
      Graph; // без изменений


Инициализация графики:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    var
    GraphDriver, GraphMode: SmallInt;
    ...
         {$ifdef Win32}
         ShowWindow(GetActiveWindow,0);
         {$endif}
     
         GraphDriver := d8bit;
         // количество бит цвета: 8-бит = 2^8 = 256 цветов, 16-бит = 2^16, 32-бит = 2^32
     
         GraphMode := m800x600; // графический режим
         InitGraph(GraphDriver,GraphMode,'');
         if Graphresult<>0 then
            exit;


Выход из графики:
Если присутствует Readln; в качестве ожидания завершения программы, то лучше заменить на этот код:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
         {$ifndef Win32}
         readln;
         {$else: Win32}
         repeat
         until Keypressed;
         {$endif}
     
         CloseGraph; // как обычно


Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: Oleg_Z 13.11.04, 17:29
Цитата
Чтобы миновать консольное окно, нужно указать вначале программы (перед Uses)

я делаю так :
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    {$MODE OBJFPC}
    {$APPTYPE GUI}

результат аналогичный.

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: Romtek 13.11.04, 20:39
Цитата Oleg_Z, 13.11.04, 20:29
результат аналогичный.
Результат аналогичный, т.к. тоже указана директива GUI

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: Romtek 24.01.05, 22:31
Переносим код из Турбо Паскаля


Давайте здесь будем помогать людям переносить свои программы из Турбо Паскаля (графику, Turbo Vision). Если у кого есть проблемы с портированием, опишите подробно проблему.
Важно: не забудьте также указать тип компилятора и его версию.
Большие куски текста не вставлять! Можно показать лишь часть кода. А если этого недостаточно, то присоедините архив к сообщению.

Добавлено
Советы:
Чтобы программы переносились легко, надо
  • Писать их на чистом Паскале, и не смешивать их со встроенным ассемблером. Плохой пример - графика в режиме 13h с применением ассемблерных процедур
  • Применять структурное программирование: чётко разбить всё по процедурам и на модули. Желательно, всё же, использовать стандартные.
  • Не обращаться напрямую к памяти и портам.

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

Из всех 32-битных компиляторов я знаю только один, который поддерживает Turbo Vision - это Virtual Pascal

Автор: Romtek 25.01.05, 19:38
Цитата Arsuit @
Из всех 32-битных компиляторов я знаю только один, который поддерживает Turbo Vision - это Virtual Pascal
:no:
Также есть и в ТМТ. Во Free Pascal есть FVision - аналог Турбо Вижн.

Автор: Arsuit 30.01.05, 16:01
Цитата Romtek @
Также есть и в ТМТ

ЧТО?!

Romtek, ты хочешь сказать что в ТМТ есть модуль App? Или как он там называется? Ни разу не видел!

Автор: Oleg_Z 31.01.05, 16:47
В TP7 часто использовал у строки нулевой элемент для определения длинны.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    var
     s:string;
    begin
     writeln(ORD(s[o])) {вывести текущую длинну строки s}
    end.

В FPC этот трюк не проходит.
Приходится использовать length.
оффтоп
Вот говорила мне мама не использовать нестандарных приемов :)

Автор: Oleg_Z 05.02.05, 18:07
FPC 1.0.10
Обнаружил:
при использовании класса Thread (fcl), необходимо следить за возможными ошибками.
Так если два паралельных процесса что-то выводят на консоль, может получиться, что когда один процесс будет что-то выводить, консоль будет занята, и произойдет ошибка.

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: Romtek 05.02.05, 20:21
Oleg_Z, указывай версию компилятора тоже. Кроме того, не всем ясно, что речь идёт именно о компиляторе FPC.

Это сообщение было перенесено сюда или объединено из темы "Особенности программирования в TMT/FPC"

Автор: Romtek 22.02.05, 21:49
Цитата Arsuit @
ты хочешь сказать что в ТМТ есть модуль App? Или как он там называется? Ни разу не видел!
:yes:
А то, что ты его ни разу не видел, не говорит о том, что он не существует.

Автор: sashat 17.03.05, 13:14
Я переношу программу из BP 7.0 с Turbo Vision
У меня есть Virtual Pascal 2.1.279 с Turbo Vision.
Все идет нормально пока непопадается модуль owindows из BP
Где взять этот модуль и(или) как(на что) его можно заменить?

Автор: Romtek 17.03.05, 14:14
Кстати, с Борланд Паскаль была та же фигня.
Вроде, первая буква в слове owindows означает Object - пробуй убрать букву о. Её позже убрали.
Кстати, под какую платформу компилируешь?

Автор: sashat 18.03.05, 04:02
Компилирую под win32

C:\VP21\BIN.W32\AL.PAS(219): Error 150: Method identifier expected
Tdialog.WMCommand(Msg);
.........^
Error: return code = 150.

Автор: Romtek 19.03.05, 20:41
Возможно, в объекте Tdialog не определён метод WMCommand. Хотя должен, по идее.
Покажи текст кода (прикрепи к сообщению).

Автор: sashat 21.03.05, 06:14
вот тут клок из начала
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     PDialogDir = ^TDialogDir;
     TDialogDir = Object(TDialog)
      List_dir,List_disc:PListBox;
      Constructor Init(AParent: Trect);
       Function CanClose: Boolean; Virtual;
       Procedure SetupWindow; Virtual;
       procedure WMInitDialog(var Msg: TMessage); virtual wm_First + wm_InitDialog;
       procedure WMCOMMAND(var Msg: TMessage); virtual WM_COMMAND;
     
       Procedure WM_CTLCOLOR(var Msg: TMessage); virtual WM_CTLColor;
      end;


А вот сама процедура
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    procedure TDialogdir.WMcommand(var Msg: TMessage);
    var
      DirInfo: TSearchRec;
      v:word;
      s:string[4];
    begin
     Tdialog.WMCommand(Msg);
     {вот тут ругается}
     case Msg.LParamHi of
    и т.д.

Автор: Romtek 21.03.05, 14:17
Насколько я понимаю, это не Турбо Вижн, а ObjectsWindows (OWL) - это разные вещи.
Виртуальный Паскаль поддерживает OWL?

Автор: sashat 23.03.05, 04:35
А как быть?

Автор: Romtek 18.04.05, 05:44
sashat, ты пробовал откомпилировать демку CALC или OWLCHESS?
Из VP Manuals:
Цитата
Object Windows Library (OWL)

VP includes a patch with which the OWL library source code can be made VP-compatible. OWL support is available for Win32 targets only. The original source code for OWL (required to make use of this compatibility in Virtual Pascal) is included in Borland Pascal and Borland Delphi v1. Additionally, 32-bit OWL programs require the file BWCC32.DLL in order to run. This DLL is included with Borland C v4.x and higher, and should be widely available for download from the Internet.

Using the ported version of the OWL library source files, it is relatively easy to recompile 16-bit OWL applications written with Borland Pascal for Windows to 32-bit Windows.

Two examples of OWL compatibility (from Borland Pascal) are included as executables: CALC and OWLCHESS; for copyright reasons, the required BWCC32.DLL file is not included.

A few special considerations are warranted when compiling OWL: Define the conditional define OWL, and recompile the RTL, particularly including the Objects unit. In OWL, some of the functions are implemented differently than for Turbo Vision.

Also note, that while OWL programs may compile with no changes, the differences in messages between Win16 and Win32 may mean that the programs do not work, and some work will be required to find and remove the problems.


Добавлено
Да и, вообще, желательно, чтобы ты прикрепил архив ZIP с твоей программой или коротким примером, который должен работать.

Автор: sashat 28.04.05, 04:51
Вот моя программа. :wub:
Заранее прошу сильно ногами не пинать. Это мой первый опыт написания программы под windows.

Автор: Romtek 29.05.05, 10:17
sashat
Глянул я на этот исходник...
Во-первых, для ознакомления программирования под Windows взял бы исходник полегче.
Во-вторых, при компиляции VP не находит кучу всяких модулей.
В третьих, а зачем тебе именно эта программа? Поставь себе задачу попроще. ;)

Добавлено
Можешь заглянуть в тему напоминающее OWL.

Автор: sashat 30.05.05, 03:13
Во первых это моя первая программа под Windows? написана еще под BP 7.0/
Dj вторых эти часики работают у меня уже мнадцать лет и я к ним привык :)
А насчет модулей, то у меня находит все, только компилить нехочет :(

Автор: Romtek 30.05.05, 14:30
У меня отсутствуют модули WinProcs, WinTypes, ODialogs
и возникают проблемы при самостоятельной компиляции исходников (несовместимости). Прикрепи, если можешь, ZIP с этими модулями. Ещё лучше, со всеми, которые участвуют в той программе (*.vpi).

Автор: ZenIA 30.05.05, 21:45
Цитата Romtek @
У меня отсутствуют модули WinProcs, WinTypes, ODialogs
и возникают проблемы при самостоятельной компиляции исходников (несовместимости). Прикрепи, если можешь, ZIP с этими модулями. Ещё лучше, со всеми, которые участвуют в той программе (*.vpi).

romtek, проблемы на 2/3 не существует — при установке
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    uses WinProcs, WinTypes
компилятор должен подключать модуль Windows (если он все же ругается, надо сделать соответствующие установки в опциях или напрямую подключать uses Windows).

Автор: Romtek 30.05.05, 22:11
ZenIA
Тогда попробуй откомпилировать файл из сообщения №15.

Автор: ZenIA 01.06.05, 03:32
У меня нет модулей OWL, и вообще эта система мне не нравится так, как даже если компилятор поддержмвает синтаксис BP, это не означает, что и структура DMT у него аналогичная.

Ps Sashat, а где исходник ресурса?

Автор: Romtek 07.07.05, 08:48
Дополнительную информацию о портировании в Free Pascal можно узнать в FreePascal.ru: Переводы -> Перенос кода из Turbo Pascal

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

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

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

Автор: nokiarody 23.05.17, 09:23
Добрый день Подскажите пожалуйста как меня старую программу которой написано на Turbo Pascal ver 5,5 переписать на новый FPC или LAZARUS

Я конечно новичок в вопросах программирования,Так что извините если что то не так.

Значит программа была написана на Turbo Pascal версия 5,5 а потом через эмулятор
DOSBOX чтобы работала Windows 7.

Ну-ка скажи как вы понимаете работает она не очень моис плохо рабтает принтер не работаеть то есть печатать нельзо резултаты (нтиквариат)
знете мне бы хотелось бы как бы ты новые формы новый новый вид передать программу?

Я конечно в гоголе много и долго там это всего вариантов я начитал или меня через lazarus которая Нет компилятора у него там Free Pascal compiler.

Я конечно не знаю какой лучший вариант может вы подскажете как легче и лушее и скорее ю
в этой программы есть математике формли и ураванения ?

То есть с моим маленьким и скромным опытом я могу ли я просто использовать копиравть и всавить старый код в лазарус или фрее паскал.
И на что мне обратить внимания то есть надо что еще дабавить в код и что можно удалить чтби работала все верно .
И из чего начать.
В программе есть фаил с окончанеим ( .pas)




скопировать его кот старый и прилепить под новой программы передать эту программу новые божеский вид современной скажи.


Я читал разные источники по документации или у неё не совсем понял где точно что надо делать
друзья нашёл коссовский предложение предложение Говори вот Turbo Pascal and компияция очень проста.
Но если честно я никак не мог разобраться как.


Так что посоветовать его в лазарусе или фрее паскал
Было бы хорошо если бы подсказали Как быть для чайников то есть там я нашел в докментации что надо через Консульская преиложения в лазарисе
Я нашел это вверху где проект но выбраю и дальше просто скапиравать и вставить но я сделал но и вышла окно черная я правада не все программу скапиравал а трлько один фаил( .pas)
Подскажите пожлйуства что я не так делаю .

И еще моменть нашел в гогеле тоже что в FPC надо вести {tp mode}

Но где это найти не знаю
И что дальше также ккапирават и всатвить или еще что надо

Заранее благодарен за ваше восприятие и понимание неопытного человека.

Автор: nokiarody 23.05.17, 09:29
Вот фото к программе
Unbenannt.PNG (, : 1895)

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)