1 (2012-12-31 05:26:31 отредактировано romkaromka)

Версия 0.0.1.
Архитектура: noarch
Зависимости: fpc
Пакет предназначен для разработки простейших приложений на free pascal, в том числе с псевдографикой.
В виде пакета собирается впервые.
Только английский язык.
Учитывая, что многие до сих пор изучают Turbo (Borland) Pascal, то я сделал пакет FreePascal для его аналога, который называется fp (он из пакета fpc).
Меню->Разработка->Среды разработки->Free Pascal - запустится привычная псевдографическая среда fp, очень похожая на Turbo (Borland) Pascal.
При первом запуске создаст каталог $HOME/FreePascal, задаст пару вопросов, - это будет рабочий каталог, где по умолчанию предлагается хранить исходники проектов, а также настройки fp.
File->New
Простейшая программа:

uses crt;
begin
  ClrScr;
  writeln ('Hello, world!');
end.

Run->Run
Недостатки: нет вообще никакой поддержки русского языка в IDE: IDE не руссифицировано, русский текст в IDE не вводится (но компилируется русский верно).
http://forum.mageia.org.ru/extensions/hcs_image_uploader/uploads/0/3000/3142/thumb/p17585fa7t1abn1a1u1kr98cg108m1.jpeg http://forum.mageia.org.ru/extensions/hcs_image_uploader/uploads/0/3000/3142/thumb/p175861tmhl8r1h2ump4acsv6a1.jpeg

Аккаунт отключен по просьбе пользователя. (28.12.2014)
Спасибо сказали: xxblx1

2

romkaromka пишет:

русский текст в IDE не вводится

По-моему, этот недостаток сводит полезность данной проги к нулю, не? Особенно для учащихся...

3

Недостаток конечно большой, но не критичный. Пусть пишут транслитом. Тем более в школах и вузах ничего сложного не проходят. Максимум дойдут до модуля Graph. Как вариант Turbo Pascal 7.0 грузится через dosbox на ура.

MXLinux 19.3 - xfce
Чем больше я работаю админом, тем больше понимаю,
насколько волшебна фраза - "Нет технической возможности!"

==============================================

4 (2012-08-23 11:47:38 отредактировано romkaromka)

olelukoie, это пока лишь первый пакет, для первого раза нормально, да и на самом деле не критично. При желании пакет можно развивать.
Надо брать не сам fp из fpc, а делать патченный fp и включать его в пакет FreePascal. Патчи в сети есть.
Руссифицировать интерфейс тоже можно - это под силу студентам.
Задача для студентов будет вполне по теме. Кто сделает - пожалуйста. Самое главное, что код открыт и можно доводить до ума.
У нас тут есть учителя в сообществе - дайте тему как курсовую студентам, школьникам, ведь fp написан на pascal - немного поправить код.
Так что польза для учащихся есть.
Если патчев будет слишком много, то родить форк fp.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

5

В первом сообщении должны быть картинки, но они не отображаются.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

6

По данному вопросу текущее состояние следующее. Есть патч, позволяющий работать с кодировкой cp866, есть открытый баг http://bugs.freepascal.org/view.php?id=23079. Осталось доделать совсем чуть-чуть: fp должен научиться понимать $LANG - тогда скрипт, запускающий fp, сможет запускать его в нужной кодировке в зависимости от $LANG.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

7

Пакет FreePascal устарел. Собрал новый пакет fp-ide.
Проверьте, пожалуйста, как вводятся теперь русские буквы.
Что было сделано:
- пакет luit был пропатчен для поддержки CP866 (CP 866),
- fp был пропатчен для поддержки кодировки CP866, но патченный fp ставится в директорию /usr/local/bin, тем самым не пересекаясь с оригинальным fp, ставящимся в директорию /usr/bin,
- скрипт fp-ide в зависимости от переменной LANG запускает fp либо оригинальный без luit, либо патченный через luit.
Если русский язык вводится нормально, то следующий этап - руссификация интерфейса.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

8 (2013-01-02 02:14:41 отредактировано romkaromka)

Символы с кодами 0 - 31 не отображаются, остальные от 32 до 255 нормально. Никак не найду причину.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

9 (2013-01-02 02:50:50 отредактировано romkaromka)

В общем нужно патчить для перевода символов с кодами 0 - 31 в видимый диапазон 32-255, а лучше каким-то образом добиться отображения символов с кодами 0 - 31. Они вообще должны в CP866 отображаться? Решив эту задачу, можно вполне руссифицировать IDE, на данный момент из-за этих символов сплошные глюки, но прогресс есть. Наработки: ftp://ftp.mageia.org.ru/mageia2/SRPMS/
http://forum.mageia.org.ru/extensions/hcs_image_uploader/uploads/0/6500/6742/thumb/p17fs67j70p131rk6169f19fvb1.png
В руссификации интерфейса выручает sed - без него полная руссификация была бы невозможна, авторы не всё вынесли в resourcestrings. И даже если бы вынесли, всё равно строки в cp866 должны быть.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

10 (2013-01-02 03:38:26 отредактировано romkaromka)

Нужно понять какие символы с кодами 0 - 31 http://www.ascii-codes.com/cp866.html не переводить в видимый диапазон, а какие переводить.
Скорее всего не надо трогать:
#0
#8 BS (BackSpace)
#9 HT (Horizontal Tabulation)
#10 LF (Line Feed)
#13 CR (Carriage Return)

Аккаунт отключен по просьбе пользователя. (28.12.2014)

11

romkaromka, я не очень понимаю насчет "символов с кодами 0-31". Я всегда думал, что таблица символов с кодами 0-127 (включительно) не зависит от кодировок, поскольку это спец. символы, цифры, знаки препинания и базовая латиница, которые определяются стандартом ASCII. Коды этих символов совпадают во всех однобайтных кодировках (koi8, iso8859-x, 125x, 437, 866,....), а также в UTF-8. Все отличия начинаются только с символа с кодом 128.

12 (2013-01-02 18:39:49 отредактировано romkaromka)

Смотри, на примере символа с кодом #21 в кодировке CP866 - это знак параграфа.
Если кодировка консоли CP866 (внешняя), и если внутренняя кодировка у fp тоже CP866, то знак параграфа хоть тресни никак не отобразить.
Если кодировка консоли UTF-8 (внешняя), то вывести знак параграфа можно.
Да, эти символы совпадают, но тут вопрос в выводе их в виде знаков.
В исходниках fp написано следующее на этот счёт:

Spoiler

{Ch contains a character in the VGA character set (i.e. codepage 437).
This routine tries to convert some VGA symbols as well as possible to the
xterm alternate character set.
Return type is word to allow expanding to UCS-2 characters in the
future.}

То есть как я понял их надо перевести в видимый диапазон по примеру как сделана функция function convert_vga_to_acs(ch:char):word;
То есть как-то так:

        case c of        
            #1: converted:=word('?');
            #2: converted:=word('?');
            #3: converted:=word('?');
            #4: converted:=word('*');
            #5: converted:=word('?');
            #6: converted:=word('?');
            #7: converted:=word('*');
            #9: converted:=word('*');
            #11: converted:=word('?');
            #12: converted:=word('?');
            #14: converted:=word('?');
            #15: converted:=word('*');
            #16: converted:=word('>');
            #17: converted:=word('<');
            #18: converted:=word('|');
            #19: converted:=word('#');
            #20: converted:=word('#');
            #21: converted:=word('S');
            #22: converted:=word('-');
            #23: converted:=word('!');
            #24: converted:=word('^');
            #25: converted:=word('v');
            #26: converted:=word('>');
            #27: converted:=word('<');
            #28: converted:=word('-');
            #29: converted:=word('_');
            #30: converted:=word('^');
            #31: converted:=word('v');
          else
            converted:=byte(c);
        end;

То есть знак параграфа я меняю на схожую по начертанию S.
К чему приводит такая замена:
http://forum.mageia.org.ru/extensions/hcs_image_uploader/uploads/0/6500/6756/thumb/p17ftuonf51k0f1591n8f17bg5kf2.png http://forum.mageia.org.ru/extensions/hcs_image_uploader/uploads/0/6500/6756/thumb/p17ftuoftrbbv1v5i14n4m112rf1.png

Аккаунт отключен по просьбе пользователя. (28.12.2014)

13 (2013-01-02 20:23:16 отредактировано olelukoie)

romkaromka пишет:

Смотри, на примере символа с кодом #21 в кодировке CP866 - это знак параграфа.

Вообще-то кодировка 866 начинается с символа с кодом 0x80, т.е. 128, как я уже написал выше. Никакого символа с кодом 21 (ни десятичным, ни шестнадцатиричным) в этой кодировке нет и быть не может, поскольку все символы с кодами 0-127 - это символы ASCII и являются составной частью *всех* однобайтных кодировок.
Для кодировки 437 предусмотрен специальный "текстовый" режим, при котором символы 0-31 имеют визуальное представление (как раз все эти значки вроде стрелочек, знаков абзаца и пр.), но их отображение - это вопрос выбранного шрифта в консоли и корректного маппинга клавиш в настройках системы. Пропатчить прикладную прогу так, чтобы она вдруг начала корректно отображать эти символы, не получится, как и найти достойную замену каждому из этих символов (на что Вы собрались заменить двунаправленную горизонтальную стрелку, к примеру?), если не пользоваться юникодом.

Для ранлевела 3 (т.е. простого VT) должен подойти шрифт Cyr_a8x14 или Cyr_a8x16. Для терминала в иксах надо подбирать, а возможно и иксы настраивать...

14 (2013-01-02 21:06:57 отредактировано romkaromka)

olelukoie, посмотри, пожалуйста, может это luit дурит - через него ведь запуск делается. Иначе заменил двунаправленную стрелочку на подчёркивание. Плюс/минус тоже заменил на подчеркивание и т.д. Понятно, что не дело это, но пока по другому никак. Думается, что luit должен позволить использовать текстовый режим для символов с кодами 0-31. Для этого его надо патчить тогда - я Си не знаю.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

15

Тут еще косяк следующий, причем у всех дистрибутивов, кроме Альта и Убунты с Дебианом: так как в репозиториях нет пакета libgdb-devel, то fp молча собирается без поддержки отладчика.
https://bugzilla.altlinux.org/show_bug.cgi?id=8899
http://sisyphus.ru/en/srpm/Sisyphus/gdb/spec
Завёл баг: https://bugs.mageia.org/show_bug.cgi?id=8583
Нужно собирать libgdb-devel пока самим.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

16

romkaromka⇓ пишет:

Скорее всего не надо трогать:
#0
#8 BS (BackSpace)
#9 HT (Horizontal Tabulation)
#10 LF (Line Feed)
#13 CR (Carriage Return)

Странно, но и их тоже пришлось перевести в видимый диапазон 32-255. Потому что инструмент "Таблица Ascii" должен иметь возможность их показать символами, иначе глючит.
http://forum.mageia.org.ru/extensions/hcs_image_uploader/uploads/0/6500/6768/thumb/p17fuv86o92k2ird5s618jhc861.png

Аккаунт отключен по просьбе пользователя. (28.12.2014)

17 (2013-01-04 15:58:13 отредактировано romkaromka)

Не могу собрать с поддержкой gdb: http://bugs.freepascal.org/view.php?id=15272

Spoiler

make[4]: Вход в каталог `/root/rpmbuild/BUILD/fpc-2.6.0/ide'
Makefile:320: Using system default libgdb file located in /usr/lib/libgdb.a
/root/rpmbuild/BUILD/fpc-2.6.0/compiler/ppc386 -di386 -Fl/root/rpmbuild/BUILD/fpc-2.6.0/libgdb/linux -Ur -Xs -O2 -n -Sg -Fu/root/rpmbuild/BUILD/fpc-2.6.0/rtl/units/i386-linux -Fu/root/rpmbuild/BUILD/fpc-2.6.0/packages/fv/units/i386-linux -Fu/root/rpmbuild/BUILD/fpc-2.6.0/packages/gdbint/units/i386-linux -Fu/root/rpmbuild/BUILD/fpc-2.6.0/packages/regexpr/units/i386-linux -Fu/root/rpmbuild/BUILD/fpc-2.6.0/packages/fcl-base/units/i386-linux -Fu/root/rpmbuild/BUILD/fpc-2.6.0/packages/iconvenc/units/i386-linux -Fu/root/rpmbuild/BUILD/fpc-2.6.0/packages/fcl-xml/units/i386-linux -Fu/root/rpmbuild/BUILD/fpc-2.6.0/packages/chm/units/i386-linux -FE. -FUunits/i386-linux -Fl/usr/lib/gcc/i586-mageia-linux-gnu/4.6.3 -Flinclude -Fl/etc/ld.so.conf.d/*.conf -dGDB_V700 -dRELEASE fp.pas
/usr/bin/ld: warning: ./link.res contains output sections; did you forget -T?
/usr/lib/libgdb.a(dfp.o): In function `decimal_from_integral':
/root/rpmbuild/BUILD/gdb-7.3.50.20110722/build-i586-mageia-linux-gnu/gdb/../../gdb/dfp.c:229: undefined reference to `decNumberFromInt32'
/root/rpmbuild/BUILD/gdb-7.3.50.20110722/build-i586-mageia-linux-gnu/gdb/../../gdb/dfp.c:227: undefined reference to `decNumberFromUInt32'
/usr/lib/libgdb.a(dwarf2read.o): In function `zlib_decompress_section':
/root/rpmbuild/BUILD/gdb-7.3.50.20110722/build-i586-mageia-linux-gnu/gdb/../../gdb/dwarf2read.c:1565: undefined reference to `inflateInit_'
/root/rpmbuild/BUILD/gdb-7.3.50.20110722/build-i586-mageia-linux-gnu/gdb/../../gdb/dwarf2read.c:1573: undefined reference to `inflate'
/root/rpmbuild/BUILD/gdb-7.3.50.20110722/build-i586-mageia-linux-gnu/gdb/../../gdb/dwarf2read.c:1577: undefined reference to `inflateReset'
/root/rpmbuild/BUILD/gdb-7.3.50.20110722/build-i586-mageia-linux-gnu/gdb/../../gdb/dwarf2read.c:1579: undefined reference to `inflateEnd'
/usr/lib/libbfd.a(compress.o): In function `bfd_compress_section_contents':
/root/rpmbuild/BUILD/gdb-7.3.50.20110722/build-i586-mageia-linux-gnu/bfd/../../bfd/compress.c:100: undefined reference to `compressBound'
/root/rpmbuild/BUILD/gdb-7.3.50.20110722/build-i586-mageia-linux-gnu/bfd/../../bfd/compress.c:106: undefined reference to `compress'
/usr/lib/libbfd.a(compress.o): In function `decompress_contents':
/root/rpmbuild/BUILD/gdb-7.3.50.20110722/build-i586-mageia-linux-gnu/bfd/../../bfd/compress.c:61: undefined reference to `inflateEnd'
/root/rpmbuild/BUILD/gdb-7.3.50.20110722/build-i586-mageia-linux-gnu/bfd/../../bfd/compress.c:49: undefined reference to `inflateInit_'
/root/rpmbuild/BUILD/gdb-7.3.50.20110722/build-i586-mageia-linux-gnu/bfd/../../bfd/compress.c:59: undefined reference to `inflateReset'
/root/rpmbuild/BUILD/gdb-7.3.50.20110722/build-i586-mageia-linux-gnu/bfd/../../bfd/compress.c:56: undefined reference to `inflate'
fp.pas(552,1) Error: Error while linking

Аккаунт отключен по просьбе пользователя. (28.12.2014)

18 (2013-01-04 17:06:46 отредактировано romkaromka)

Нашёл альтернативный способ как прикрутить gdb ftp://ftp.freepascal.org/pub/fpc/contrib/libgdb/ с ним получилось (но пока всё очень нестабильно работает http://bugs.freepascal.org/view.php?id=23581).

Аккаунт отключен по просьбе пользователя. (28.12.2014)

19 (2013-01-05 06:36:44 отредактировано romkaromka)

http://www.freepascal.ru/forum/viewtopi … =15#p68279 ребята пишут, что виноваты настройки консоли.
Задача: разобраться как настроить консоль и прогнать тестовый пример по ссылке - он должен вывести все символы из диапазона 1..31, а не пустоту.
Помогайте, я не осиливаю.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

20

romkaromka пишет:

http://www.freepascal.ru/forum/viewtopi … =15#p68279 ребята пишут, что виноваты настройки консоли.
Задача: разобраться как настроить консоль и прогнать тестовый пример по ссылке - он должен вывести все символы из диапазона 1..31, а не пустоту.
Помогайте, я не осиливаю.

Естественно консоли. Консоль использует utf-8, а пример - cp437. Я посмотрел малость исходники этой ide, могу сказать только одно: лучше про эту фигню забыть сразу и больше не вспоминать. Пытаться сделать ее локализацию - занятие совершенно не благодарное, и не понимаю, кому вообще нужное.

21 (2013-01-05 19:53:03 отредактировано romkaromka)

olelukoie, тем не менее я перевёл её на русский уже на 100%. Да, перевести было крайне тяжело, 1500 строк, большая часть из которых не была вынесена в ресурсы - я писал специальный скрипт, использовал sed. Но я сделал русский перевод полностью. Осталось лишь отладить, разобраться с консолью, с отладчиком и т.д.
src.rpm у нас в репозитории, смотрите, поправляйте.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

22 (2013-01-06 02:30:36 отредактировано romkaromka)

С консолью разобрался, отказался от luit (fp-ide-2.6.0-8.mrc.mga2.i386). Надо теперь протестировать в различных DE. Открыт вопрос отладчика.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

23

То, что Вы перевели все строки, я видел. Но, как я понял, это было самой лёгкой частью работы по локализации, да? smile

Я просто вижу, сколько усилий требуется для того, чтобы заставить эту прогу работать с русским языком и отладчиком, а реальная польза будет близкой к нулю: ну кто сейчас использует такие инструменты? Про Turbo Pascal, который имитирует данная среда, все уже давным давно забыли, все учебные пособия давно переписаны под более современные средства разработки (тот же Delphi), в производстве его уже много лет как не используют. Так зачем оно? Лично мне кажется, что эта с позволения сказать "среда разработки" не стоит не только вложенных Вами сил, но и даже простого внимания. Разве что как работающий музейный экспонат, типа "посмотрите, детки, на чём вашим папашам приходилось кодить, и возрадуйтесь, что вам это уже не нужно" smile

24 (2013-01-06 15:47:50 отредактировано romkaromka)

olelukoie, У нас в городе в Хим. Университете на первом курсе изучают Turbo Pascal. Всего один семестр. По большому счёту химикам больше и не надо ничего знать о программировании - и такой подход во всех вузах. Также в специализированных Университетах у нас в городе на специальности "программист" обучение начинается именно с Turbo Pascal, затем только переходят на Delphi. В школах нашей области изучают либо Бейсик (причем разные его диалекты, вплоть до версии микрокомпьютера БК), либо опять же Turbo Pascal.
Таким образом, сейчас у нас в репозитории есть для всего этого аналоги:
1) Turbo Pascal -> Free Pascal IDE (пакет fp-ide),
2) Delphi -> Lazarus (пакет lazarus),
3) Бейсик БК версии -> пакет bk-emu,
4) Бейсик -> пакет basic256.
Также есть geany, mseide-msegui. Еще соберу скоро новый пакет для Бейсика БК версии (bk-java).
Книг по Turbo (Borland) Pascal полно.

Я протестировал пакет fp-ide в 3-х DE: KDE, Gnome, LXDE - русский язык работает замечательно, текущий алгоритм использования для этого неродного для DE эмулятора терминала вполне работоспособен. Приспособил lxterminal (для всех DE) и gnome-terminal (для LXDE) для запуска в кодировке CP866 (сейчас никаких UTF-8 быть не должно - и консоль, и редактор используют только CP866).

Вот с отладчиком да, действительно туго (я даже скомпилировал его с поддержкой отладчика, нашёл способ, но отладчик не работает), а с русским я всё осилил - проблем больше нет, разве что по мелочи - типа горячие клавиши не все работают, но тут чувствуется и не сделать, так как их перехватывает эмулятор терминала (Alt+Ф, например - и там и тут вызов меню Файл).

Аккаунт отключен по просьбе пользователя. (28.12.2014)

25 (2013-01-15 13:03:39 отредактировано romkaromka)

У кого есть принтер посмотрите, пожалуйста, вывод команды:

Консоль
which lpr

Делаю патч для fp для поддержки принтера, но не уверен можно ли привязываться к lpr http://www.linuxdoc.org/HOWTO/Printing- … WTO-2.html
У меня lpr есть.
Набросок патчей пока такой:

Spoiler

--- ./ide/fpide.pas.orig    2010-02-15 18:59:33.000000000 +0300
+++ ./ide/fpide.pas    2013-01-15 02:00:35.626222483 +0400
@@ -25,6 +25,7 @@
{$i globdir.inc}

uses
+  unix,
   Objects,Drivers,Views,App,Gadgets,MsgBox,Tabs,
   WEditor,WCEdit,
   Comphook,Browcol,

Spoiler

--- ./ide/fpmfile.inc.orig    2010-02-11 19:11:53.000000000 +0300
+++ ./ide/fpmfile.inc    2013-01-15 13:38:35.646840620 +0400
@@ -286,5 +286,6 @@
           end;
         write(f,#12);
         close(f);
+        fpsystem('fp-prn '+d+' > /dev/null 2>&1');
       end;
   end;

Скрипт fp-prn:

Spoiler

#!/bin/bash

if [ "$1" = "" ]
then
  exit 1
fi

A=`which lpr`
if [ "$A" = "" ]
then
  exit 1
fi

B=`which iconv`
if [ "$B" = "" ]
then
  exit 1
fi

iconv -c -s -f CP866 -t UTF-8 $1 > $1.tmp
cat $1.tmp |lpr
rm -f $1.tmp
rm -f $1

Наложенный патч позволяет вызвать внешний скрипт fp-prn, который и будет выполнять печать.
d, $1 здесь - это файл, который пойдет на печать.

Аккаунт отключен по просьбе пользователя. (28.12.2014)