Замена Graph в Linux. Установка PTCPas

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Замена Graph в Linux. Установка PTCPas

Сообщение Mavlyudov » 15.09.2019 00:24:48

Прочитал, что можно поставить пакет PTCPas, чтобы компилировать через fpc программы, написанные на
TurboPascal, где использовался модуль Graph.

Последнюю версию ptcpas скачиваю отсюда:
https://sourceforge.net/projects/ptcpas/files/ptcpas/0.99.14.1/ (файл ptcpas-0.99.14.1.tar.bz2)
Распаковал.
Далее сконфигурировал командой
Код: Выделить всё
./configure

Потом компилирую
Код: Выделить всё
make

и получаю ошибку: can't find unit x used by ptc

Изображение

Посмотрел, ссылка на модуль действительно есть:

Изображение
Mavlyudov
новенький
 
Сообщения: 34
Зарегистрирован: 24.01.2010 20:35:23

Re: Замена Graph в Linux. Установка PTCPas

Сообщение Vadim » 15.09.2019 20:14:48

Mavlyudov
В FreePascal уже есть готовый скомпилированный модуль, который называется ptcGraph. Подробности можно прочитать здесь:
http://www.freepascal.ru/article/freepa ... 215095658/
Vadim
долгожитель
 
Сообщения: 3838
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Замена Graph в Linux. Установка PTCPas

Сообщение Mavlyudov » 15.09.2019 22:32:55

Vadim
Эти модули вроде как и есть из этого пакета PTCpas.
Ту статью я видел, там пишут, что нужны два файла
Xxf86vm (файл libXxf86vm.so).
Xxf86dga (файл libXxf86dga.so).
Но как их поставить под ubuntu я не знаю.

На другом форуме пишут, что надо установить библиотеки devel
Код: Выделить всё
apt-get install libX11-devel libXext-devel libXrandr-devel libXxf86dga-devel libXxf86vm-devel svgalib-devel

Но тоже не получается, пишет "невозможно найти пакет".

Я поставил так
Код: Выделить всё
sudo apt-get update && sudo apt-get install libxxf86vm-dev
sudo apt-get install libxxf86dga-dev


Изображение

Изображение

Какие из этих файлов выбрать?
Mavlyudov
новенький
 
Сообщения: 34
Зарегистрирован: 24.01.2010 20:35:23

Re: Замена Graph в Linux. Установка PTCPas

Сообщение Vadim » 16.09.2019 04:02:19

Mavlyudov писал(а):Эти модули вроде как и есть из этого пакета PTCpas.

Вы не поняли. В составе FreePascal есть уже готовые и откомпилированные модули. От Вас каких-то дополнительных мер уже не требуется, кроме как подключить модуль в своём программном коде.
Mavlyudov писал(а):Но тоже не получается, пишет "невозможно найти пакет".

"devel" - возможно они так назывались когда-то давно. Сейчас у них постфикс - "dev". Dev-пакеты нужны для того случая, если Вы вручную не хотите делать симлинки "без хвостов" на на сами библиотеки. Установочные пакеты для Ubuntu 19.04 непосредственно с библиотеками называются:
libxxf86dga1
libxxf86vm1
Dev-пакеты, если Вы их устанавливаете из репозитория, автоматом, как зависимости, установят и вышеназванные пакеты, а заодно и "безхвостые" симлинки, с которыми непосредственно будет работать FPC.
Vadim
долгожитель
 
Сообщения: 3838
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Замена Graph в Linux. Установка PTCPas

Сообщение Mavlyudov » 16.09.2019 23:15:16

Vadim
Вот, решил проверить, можно ли подключить "готовые и откомпилированные" модули.
Поставил на виртуалку чистую Ubuntu.
Далее поставил Free Pascal:
Код: Выделить всё
sudo apt-get install fp-compiler

Далее пытаюсь оттранслировать пример из статьи "Слово об использовании модуля Graph в Linux".
Код: Выделить всё
Program demo;
Uses ptcGraph;

Var
    Driver: SmallInt;  // Номер драйвера
    Mode  : SmallInt;  // Номер графического режима
    x, y, i, Color  : Integer;  // Координаты

Begin
    // Установка графического режима
    DetectGraph(Driver, Mode);
    InitGraph(Driver, Mode, '');
    Color:=0;
    y:=0;
    For i:=0 To 63 Do
    Begin
        For x:=0 To 1023 Do
        Begin
            SetColor(Color);
            Line(x, y, x, y+10);
            Inc(Color);
        End;
        y:=y+12;
    End;
    ReadLn;
    CloseGraph;
End.

Получаю ошибку. Что я не так делаю? Если модули оттранслированы и подключены, тогда в чем проблема?
Читал, что ptcGrapgh есть в версии 2.6.2.
Изображение
Mavlyudov
новенький
 
Сообщения: 34
Зарегистрирован: 24.01.2010 20:35:23

Re: Замена Graph в Linux. Установка PTCPas

Сообщение Дож » 16.09.2019 23:40:13

В пакете fp-compiler есть модули или там только компилятор? Я ставил пакет fpc и у меня находит
Код: Выделить всё
doj@DESKTOP-E63N244:~$ cat demo.pas
uses
  ptcGraph;
begin
end.
doj@DESKTOP-E63N244:~$ fpc demo.pas
Free Pascal Compiler version 3.0.4+dfsg-18ubuntu2 [2018/08/29] for x86_64
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling demo.pas
Linking demo
/usr/bin/ld.bfd: warning: link.res contains output sections; did you forget -T?
4 lines compiled, 1.3 sec


1. Ищите директорию, где у вас ptcgraph.o и ptcgraph.ppu.

2. Вручную передаёте путь компилятору. У меня это /usr/lib/x86_64-linux-gnu/fpc/3.0.4/units/x86_64-linux и запуск выглядит так:
Код: Выделить всё
fpc -Fu/usr/lib/x86_64-linux-gnu/fpc/3.0.4/units/x86_64-linux demo.pas


3. Если в пункте 2 скомпилируется, разбирайтесь с путями в вашем fpc.cfg. Если вы сделаете пункты 1 и 2 и всё равно fpc не увидит модуль, то похоже на баг компилятора.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 814
Зарегистрирован: 12.10.2008 16:14:47

Re: Замена Graph в Linux. Установка PTCPas

Сообщение Alex2013 » 17.09.2019 01:14:02

Честно говоря совершенно не вижу смысла в "копировании BGI-графики" В модуле Graph с десяток процедур и функций что мешает эмулировать их в конвас GUI непонятно в принципе .
Но если так уж хочется загляните сюда .
http://www.freepascal.ru/article/freepa ... 0215095658
Alex2013
долгожитель
 
Сообщения: 1586
Зарегистрирован: 03.04.2013 11:59:44

Re: Замена Graph в Linux. Установка PTCPas

Сообщение Mavlyudov » 17.09.2019 02:17:37

В общем, поставил так: (начинаю с того места установкb пакета PTCPas, где была ошибка - не найдем модуль X)

Код: Выделить всё
.pp(137,15) Fatal: Can't find unit x used by ptc

Исправляем установкой Free Pascal - Free Component Library dependency package
Код: Выделить всё
sudo apt-get install fp-units-fcl

Далее будет ошибка
Код: Выделить всё
ptc.pp(151,7) Fatal: Can't find unit glx used by ptc

Исправляем установкой Free Pascal - graphics-library units dependency package
Код: Выделить всё
sudo apt-get install fp-units-gfx

Повторяем
Код: Выделить всё
make

Несколько модулей должны успешно откомпилироваться:
Compiling ptc.pp
10965 lines compiled, 1.3 sec
Compiling ptcwrapper/ptcwrapper.pp
Compiling ptcwrapper/ptceventqueue.pp
678 lines compiled, 0.3 sec
Compiling ptcgraph/ptcgraph.pp
10468 lines compiled, 0.5 sec
Compiling ptcgraph/ptccrt.pp
418 lines compiled, 0.2 sec

Компилируем демонстрационную программу.
Код: Выделить всё
fpc demo.pas

Видим ошибку
Код: Выделить всё
demo.pas(27,1) Warning: "crtbegin.o" not found, this will

Ищем расположение файла crtbegin.o
Код: Выделить всё
sudo find / -name crtbegin.o
/usr/lib/gcc/x86_64-linux-gnu/7/crtbegin.o

Теперь надо настроить fpc.cfg - файл конфигурации FreePascal
Сначала ищем его расположение.
Код: Выделить всё
sudo find / -name fpc.cfg
/var/lib/dpkg/alternatives/fpc.cfg
/etc/alternatives/fpc.cfg
/etc/fpc.cfg

Нашлось несколько файлов. Правим в редакторе "gedit" тот, что в директории /etc
или /etc/alternatives - неважно, при правке одного изменения запишутся и во второй
Код: Выделить всё
sudo gedit /etc/fpc.cfg

Находим строчку c " gcclib" и вписываем туда путь с директивой -Fl:
Код: Выделить всё
# path to the gcclib
-Fl/usr/lib/gcc/x86_64-linux-gnu/7/

Пробуем компилировать
Код: Выделить всё
fpc demo.pas

Появляется ошибка
Код: Выделить всё
/usr/bin/ld.bfd: cannot find -lXrandr

Исправляем установкой libxrandr
Код: Выделить всё
sudo apt-get install libxrandr-dev

Далее пробуем компилировать и видим:
Код: Выделить всё
/usr/bin/ld.bfd: cannot find -lXi

Исправляем установкой libxi
Код: Выделить всё
sudo apt-get install libxi-dev


Иногда требуется поставить инструменты сборки пакетов Debian
Код: Выделить всё
sudo apt install dpkg-dev


Теперь ответы на вопросы
Дож
fp-compiler, видимо, не содержит модулей. по крайней мере у меня. Я его ставил так
Код: Выделить всё
sudo apt-get install fp-compiler

Потом установил чистую систему и выяснил, что можно было поставить просто FPC
Код: Выделить всё
sudo apt-get install fpc
и сразу компилировать demo.pas.

Alex2013
Ссылка на эту статью уже есть в данной теме, но все равно спасибо.
Что значит "эмулировать их в конвас GUI"? Можно подробнее и с примерами?
Mavlyudov
новенький
 
Сообщения: 34
Зарегистрирован: 24.01.2010 20:35:23

Re: Замена Graph в Linux. Установка PTCPas

Сообщение Vadim » 17.09.2019 04:30:18

Mavlyudov писал(а):fp-compiler, видимо, не содержит модулей. по крайней мере у меня.

Не только у Вас... :D
На всякий случай поясняю: дело компилятора - преобразовать текст Вашей программы в двоичный код, понятный процессору. А процессору, в свою очередь, этот двоичный код скармливает операционная система. Следовательно, задача компилятора довольно узка - преобразование текста и приклеивание необходимых кусков из объектных файлов текущей ОС. Чтобы указанные в Вашей программе дополнительные модули подключились компилятором к Вашей программе, их нужно иметь в системе (или сделать самому). В комплекте с компилятором (любым) обычно идут те модули, которые, по стандарту языка программирования, считаются неотъемлемой частью языка. Согласитесь, модули типа ptcGraph очень трудно назвать "неотъемлемой" частью языка. В данном случае он нужен только Вам. А, к примеру, ни мне, ни Дожу он не нужен. Именно поэтому он (как и многие другие) считается дополнительным и лежит в отдельном пакете.
Вообще говоря, в разных ОС пакет FreePascal собирают по разным принципам. В некоторых ОС все модули идут кучей, без разбора необходимы они или нет. В Ubuntu решили, что компилятор отдельно, а все остальные модули - отдельно. Пакет "fpc" является метапакетом, т.е. в нём содержатся указатели, какие ещё модули FreePascal есть и какие модули надо ставить, плюс к этому необходимые для этих модулей системные библиотеки, без которых модули работать не будут, т.к. обращаются к каким-то функциям этих библиотек.
Mavlyudov писал(а):Получаю ошибку. Что я не так делаю?

Скерее, "не делаете"... ;-)
Это говорит о том, что Вы позабыли установить пакет, в котором находится модуль ptcGraph. Для Ubuntu этот пакет называется fp-units-gfx.
Vadim
долгожитель
 
Сообщения: 3838
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Замена Graph в Linux. Установка PTCPas

Сообщение Mavlyudov » 17.09.2019 13:30:47

Vadim
Ну да, верно. Про fp-units-gfx я написал тоже.
Странно, что при установке командой sudo apt-get install fp-compiler в установленной
версии 3.0.4 (3.0.4+dfsg-18) нету модуля ptcGraph, хотя при скачивании с sourceforge туже версию
(https://sourceforge.net/projects/freepa ... nux/3.0.4/, Файл : fpc-3.0.4.x86_64-linux.tar), файл ptcGraph присутствует:
в каталоге ...\lib\fpc\3.0.4\units\x86_64-linux\graph (ptcgraph.o, ptcgraph.ppu).
Как так?

При этом, как я писал выше, при установке командой sudo apt-get install fpc демонстрационная программа с модулем ptcGraph компилируется сразу.
Можно ли скачать этот пакет (который cтавится через sudo apt-get install fpc) файлом (чтобы установить, например, в другом линуксе, где в репозитории нету fpc и fp-compiler)?
Mavlyudov
новенький
 
Сообщения: 34
Зарегистрирован: 24.01.2010 20:35:23

Re: Замена Graph в Linux. Установка PTCPas

Сообщение Дож » 17.09.2019 14:54:39

Странно, что при установке командой sudo apt-get install fp-compiler в установленной
версии 3.0.4 (3.0.4+dfsg-18) нету модуля ptcGraph, хотя при скачивании с sourceforge туже версию
(https://sourceforge.net/projects/freepa ... nux/3.0.4/, Файл : fpc-3.0.4.x86_64-linux.tar), файл ptcGraph присутствует:
в каталоге ...\lib\fpc\3.0.4\units\x86_64-linux\graph (ptcgraph.o, ptcgraph.ppu).
Как так?

При этом, как я писал выше, при установке командой sudo apt-get install fpc демонстрационная программа с модулем ptcGraph компилируется сразу.

Потому что fp-compiler содержит только компилятор, а не модули. Если вам нужен fpc полностью, а не только компилятор, то нужно ставить пакет под названием fpc.

Что здесь непонятного, неожиданного или удивительного?

Можно ли скачать этот пакет (который cтавится через sudo apt-get install fpc) файлом (чтобы установить, например, в другом линуксе, где в репозитории нету fpc и fp-compiler)?

Вы можете собрать fpc из исходников на линуксе, где готовый fpc есть, для другого линукса, где его нет. Называется кросскомпиляция.

Копировать бинарные данные с одного линукса на другой -- затея так себе. Можете попробовать, конечно, но в случае проблем я бы не рассчитывал на вашем месте на помощь на форумах...
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 814
Зарегистрирован: 12.10.2008 16:14:47

Re: Замена Graph в Linux. Установка PTCPas

Сообщение Alex2013 » 17.09.2019 19:05:19

Vadim писал(а):Что значит "эмулировать их в конвас GUI"? Можно подробнее и с примерами?

Я вообще-то имел ввиду Лазарус с LCL ... можно и в "чистом" FPC (хотя зачем он нужен ?)...
Код: Выделить всё
{$mode objfpc}{$H+}

uses FPWritePNG,
     {$ifndef UseFile}classes,{$endif}
     FPImage,FPImgCanv, sysutils;

var Img : TFPMemoryImage;
    Canvas : TFPImageCanvas;
    Writer : TFPCustomimageWriter;

procedure Init;
begin
  Writer := TFPWriterPNG.Create;
  img := TFPMemoryImage.Create(0,0);
  img.UsePalette:=false;
  img.SetSize(100,100);
  canvas := TFPImageCanvas.Create(img);

  canvas.brush := canvas.CreateBrush;
  canvas.brush.fpcolor:=FPColor(255,0,255);
  canvas.FloodFill(50,50); // Как залить поле заданным цветом?

  canvas.pen := canvas.createpen;
  canvas.pen.fpcolor := colGreen;
  canvas.line(0,0,10,10);
end;

procedure WriteImage;
var t: string;
begin
  t := ''; // параметры для сохранения файла
  with (Writer as TFPWriterPNG) do
    begin
      Grayscale := pos ('G', t) > 0;
      Indexed := pos ('I', t) > 0;
      WordSized := pos('W', t) > 0;
      UseAlpha := pos ('A', t) > 0;
    end;
  img.SaveToFile ('tmp.png', Writer);
end;

procedure Clean;
begin
  Writer.Free;
  Canvas.Free;
  Img.Free;
end;

begin
    try
      Init;
      WriteImage;
      Clean;
    except
      on e : exception do
        writeln ('Error: ',e.message);
    end;
end.

Тут "рисует на картинке" но никто мешает узнать хендел окна/экрана ...

...и сделать что-то вроде этого "псевдокода":
Код: Выделить всё
Var
    wnd:HWND;
    dc:HDC;
    Bmp:TBitmap;
    r:TRect;

begin
     wnd:=GetConsoleWindow();
       dc := GetWindowDC(wnd);
         GetWindowRect(wnd,r);
        Bmp := TBitmap.Create;
        Bmp.SetSize(r.Right-r.Left,r.Bottom-r.Top);

// тут рисую на  Bmp.
  Bmp.canvas.pen.color := clGreen;
  Bmp.canvas.line(0,0,10,10);
//...

BitBlt(DC,0,0,Bmp.Width,Bmp.Height,Bmp.Canvas.Handle,0,0,SRCCOPY);      )
ReleaseDC(wnd,dc);
Bmp.free;

ReadLn;
end;

(псевдокод разумеется нерабочий его задача просто показать "куда копать"... хотя все может быть... За основу взят "вывернутый наизнанку " код получения "скриншота" нужно только модули для uses найти )
У меня там
uses
windows,Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, Buttons,
StdCtrls,lconvencoding;
но это оконное приложение Лазарус + LCL а для консоли все куда скромнее будет ...

Хотя еще раз призываю вас не маяться написанием графических приложений в "чистом FPC" а сразу писать в Лазарусе .
Что существенно проще надежнее и удобней.
Изображение

(Это мой "псевдо-векторный" редактор html-форм с графикой ... так сказать "100%-ный Canvas " )
Последний раз редактировалось Alex2013 18.09.2019 15:17:38, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 1586
Зарегистрирован: 03.04.2013 11:59:44

Re: Замена Graph в Linux. Установка PTCPas

Сообщение Vadim » 18.09.2019 06:55:11

Mavlyudov писал(а):Странно, что при установке командой sudo apt-get install fp-compiler в установленной
версии 3.0.4 (3.0.4+dfsg-18) нету модуля ptcGraph...

Как раз странно, что Вы задаёте именно такие вопросы. ;-) :D
Модуль ptcGraph к компилятору никаким боком не относится. Этот модуль нужен только Вам, как программисту. А Вы устанавливаете именно компилятор (внимательно читаем название пакета!!! - "fp-compiler"). Для компилятора не имеет никакого значения - есть ptcGraph или его нету.
Vadim
долгожитель
 
Сообщения: 3838
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru