Прикручивание русского языка к FP в линуксе
Модератор: Модераторы
-
alex_alex_alex1
- постоялец
- Сообщения: 207
- Зарегистрирован: 15.10.2010 14:08:50
Re: Прикручивание русского языка к FP в линуксе
64 битную сборку не собирал, но так как сейчас все патчи архитектурно-независимы, то проблем возникнуть не должно.
Re: Прикручивание русского языка к FP в линуксе
Патч для правильного отображения позиции курсора в окне редактирования кода для Linix x86_64 сборки:
fpcbuild-2.6.0/fpcsrc/ide/wcedit.pas
С тебя протестировать на 32 битной сборке и во время ближайшего пакета обновления добавить патч в дистрибутив
fpcbuild-2.6.0/fpcsrc/ide/wcedit.pas
Код: Выделить всё
procedure TIndicator.Draw;
var
Color: Byte;
Frame: Char;
L: array[0..1] of Longint;
S: String[15];
B: TDrawBuffer;
K: String; //[[[[[[[[[[[[[[[[[
begin
if assigned(CodeOwner) and
(CodeOwner^.ELockFlag>0) then
begin
CodeOwner^.IndicatorDrawCalled:=true;
exit;
end;
if (State and sfDragging = 0) and (State and sfActive <> 0) then
begin
Color := GetColor(1);
Frame := #205;
end
else
begin
if (State and sfDragging)<>0 then
Color := GetColor(2)
else
Color := GetColor(3);
Frame := #196;
end;
MoveChar(B, Frame, Color, Size.X);
if State and sfActive<>0 then
begin
if Modified then
WordRec (B[0]).Lo := ord('*');
{$ifdef debug}
if StoreUndo then
WordRec (B[1]).Lo := ord('S');
if SyntaxComplete then
WordRec(B[2]).lo := ord('C');
if UseTabs then
WordRec(B[3]).lo := ord('T');
{$endif debug}
L[0] := Location.Y + 1;
L[1] := Location.X + 1;
//[[[[[[[[[[[[[[ FormatStr(S, ' %d:%d ', L); //проблемная процедура
Str(L[0],S); //[[[[[[[[[[[[[[[[[[[[v
if Length(S)<6 then S:=' '+S;
S:=S+':';
Str(L[1],K);
if Length(K)<3 then K:=K+' ';
S:=S+K; //[[[[[[[[[[[[[[[[[[[[^
MoveStr(B[8 - Pos(':', S)], S, Color);
end;
WriteBuf(0, 0, Size.X, 1, B);
end;С тебя протестировать на 32 битной сборке и во время ближайшего пакета обновления добавить патч в дистрибутив
-
alex_alex_alex1
- постоялец
- Сообщения: 207
- Зарегистрирован: 15.10.2010 14:08:50
Re: Прикручивание русского языка к FP в линуксе
Всё ОК на 32бит, спасибо. Патч отправлен в апстрим http://bugs.freepascal.org/view.php?id=23957
По сути осталось самое сложное - исправить отладчик, ну и походу если ещё какие-то баги всплывут.
src.rpm: ftp://ftp.mageialinux.ru/mageia2/SRPMS/ (fp-ide-2.6.0-13.mrc.mga2.src.rpm)
По сути осталось самое сложное - исправить отладчик, ну и походу если ещё какие-то баги всплывут.
src.rpm: ftp://ftp.mageialinux.ru/mageia2/SRPMS/ (fp-ide-2.6.0-13.mrc.mga2.src.rpm)
Re: Прикручивание русского языка к FP в линуксе
Сквозняк писал(а):Патч
О боги! А почему не тривиальное:
Код: Выделить всё
- L: array[0..1] of LongInt;
+ L: array[0..1] of Pointer;
...
- L[0] := Location.Y + 1;
- L[1] := Location.X + 1;
+ L[0] := Pointer(Location.Y + 1);
+ L[1] := Pointer(Location.X + 1);
...
Тест
Код: Выделить всё
uses Drivers;
var
S: string[15];
L: array [0..1] of Pointer;
begin
L[0] := Pointer(1025);
L[1] := Pointer(1026);
FormatStr(S, ' %d:%d ', L);
writeln('[', S, ']');
end.
Код: Выделить всё
./test32
[ 1025:1026 ]
Код: Выделить всё
./test64
[ 1025:1026 ]
ps. Строго говоря, с учётом того, что в packages/fv/src/drivers.pas
Код: Выделить всё
procedure FormatStr (Var Result: String; CONST Format: String; Var Params);
TYPE TLongArray = Array[0..0] Of PtrInt;
Re: Прикручивание русского языка к FP в линуксе
bormant писал(а):А почему не тривиальное:
А потому что нет привычки а значит и опыта в работе с указателями - большинство задач как-то решаются без этого. И ещё make создаёт неудобства - нужно несколько минут ждать чтобы скомпилить и проверить результат опытным путём. Твой вариант патча потянет отображение строки с номером 123456?
Добавлено спустя 5 минут 29 секунд:
alex_alex_alex1 писал(а):По сути осталось самое сложное - исправить отладчик
А вот с этим вопросом чем дальше тем туманнее. Привычки пользоваться gdb тоже нет а значит команды для работы с ним неизвестны. Попробовал на альтовском иде с gdb 7.2 протестировать однопоточный пример
Код: Выделить всё
VAR
Q3,W3: BYTE;
begin
WRITELN('jjkjkj');
W3:=100;
Q3:=1+W3;
WRITELN(Q3);
end.Потыкал, ничего не падает. Если альтовский способ сборки с отладчиком не устраивает, то давай свой тестовый пример и пошаговый набор действий: куда и что тыкать чтобы упало или заглючило. Иначе непонятно, что вообще от отладчика требуется.
Re: Прикручивание русского языка к FP в линуксе
К слову, дело не совсем, а точнее, совсем не в указателях...Сквозняк писал(а):нет привычки а значит и опыта в работе с указателями
В оригинальном Turbo Vision, если правильно путаю, внутри FormatStr() параметр var Params использовался для передачи значений, которые интерпретировались в зависимости от спецификатора формата:
Код: Выделить всё
{ A generalized string formatting routine. Given a string in Format }
{ that includes format specifiers and a list of parameters in Params, }
{ FormatStr produces a formatted output string in Result. }
{ Format specifiers are of the form %[-][nnn]X, where }
{ % indicates the beginning of a format specifier }
{ [-] is an optional minus sign (-) indicating the parameter is to be }
{ left-justified (by default, parameters are right-justified) }
{ [nnn] is an optional, decimal-number width specifier in the range }
{ 0..255 (0 indicates no width specified, and non-zero means to }
{ display in a field of nnn characters) }
{ X is a format character: }
{ 's' means the parameter is a pointer to a string. }
{ 'd' means the parameter is a Longint to be displayed in decimal. }
{ 'c' means the low byte of the parameter is a character. }
{ 'x' means the parameter is a Longint to be displayed in hexadecimal.}
{ '#' sets the parameter index to nnn. }
В x64 указатель стал вдвое длиннее, но по спецификации процедуры по-прежнему должен помещаться в списке передаваемых параметров, отсюда и первый патч. Потом (а нужно было сразу) решил проверить, а что в коде FormatStr() в FreeVision.
В FreeVision процедуру FormatStr() переписали на паскале, в нынешнем варианте там
Код: Выделить всё
procedure FormatStr (Var Result: String; CONST Format: String; Var Params);
type
TLongArray = Array[0..0] Of PtrInt;
...
Case Format[FormatIndex] Of
...
'c': S := Char(TLongArray(Params)[I]); { Character parameter }
'd': S := LongToStr(TLongArray(Params)[I],10); { Decimal parameter }
's': S := PString(TLongArray(Params)[I])^; { String parameter }
'x': S := LongToStr(TLongArray(Params)[I],16); { Hex parameter }
end;
...
-
alex_alex_alex1
- постоялец
- Сообщения: 207
- Зарегистрирован: 15.10.2010 14:08:50
Re: Прикручивание русского языка к FP в линуксе
Надо брать gdb последних версий. Для Магея 2 это gdb-7.3.50, для Магея 3 это gdb-7.5.1. На ранних версиях вроде как должно работать, но ошибки с новыми версиями gdb. А падает если поставить точку останова и запустить пошагово - падение мгновенно происходит.
Видите как хорошо дело пошло - уже целых 3 патча для исправления правильного отображения позиции курсора. Так держать!
Видите как хорошо дело пошло - уже целых 3 патча для исправления правильного отображения позиции курсора. Так держать!
Re: Прикручивание русского языка к FP в линуксе
alex_alex_alex1 писал(а):Надо брать gdb последних версий. Для Магея 2 это gdb-7.3.50, для Магея 3 это gdb-7.5.1.
Пилить совместимость со всеми новыми версиями gdb это не дело - работы будет выше крыши а пользы фиг да нефига. Допустим, есть рабочий биндинг к gdb-7.2, теперь надо запилить (если альт раньше не запилит) к ~7.5.1 а на все промежуточные версии забить иначе на полезные дела времени не останется, вместо них будешь пахать как ментейнер
-
alex_alex_alex1
- постоялец
- Сообщения: 207
- Зарегистрирован: 15.10.2010 14:08:50
Re: Прикручивание русского языка к FP в линуксе
Сквозняк, согласен, бери последнюю версию gdb. А на Альт надеяться смысла нет - они уже год делают и бестолку, Арч тоже баг не решил, закрыв его, апстрим тоже не чешется.
Re: Прикручивание русского языка к FP в линуксе
alex_alex_alex1 писал(а):Собрать с gdb не проблема
Со сборкой нарисовалась проблема. gdb7.5 и gdb7.5.1 собираются без libgdb.a Как их собрать или откуда взять (64 бит, не из арча)?
Собираюсь попробовать бэкпортировать gdbint.pp из fpc2.7.1 - там есть биндинг к gdb7.5.
-
alex_alex_alex1
- постоялец
- Сообщения: 207
- Зарегистрирован: 15.10.2010 14:08:50
Re: Прикручивание русского языка к FP в линуксе
libgdb.a появляется при сборке gdb всё равно, но в пакеты не попадает. Откуда взять? Пересобрать gdb.
gdbint.pp можно взять полностью, ну, соберётся с поддержкой gdb, а отладчик в fp всё равно работать не будет - надо править сам код fp.
Варианты сборки с поддержкой отладчика у меня см. в spec файле.
"download GDB sources, recompile then, and use packages/gdbint/gen-libgdb-inc.sh script" - это один из вариантов как получить необходимые зависимости, затем см. в spec как указать, что их юзать.
gdbint.pp можно взять полностью, ну, соберётся с поддержкой gdb, а отладчик в fp всё равно работать не будет - надо править сам код fp.
Варианты сборки с поддержкой отладчика у меня см. в spec файле.
"download GDB sources, recompile then, and use packages/gdbint/gen-libgdb-inc.sh script" - это один из вариантов как получить необходимые зависимости, затем см. в spec как указать, что их юзать.
Re: Прикручивание русского языка к FP в линуксе
alex_alex_alex1 писал(а):libgdb.a появляется при сборке gdb всё равно, но в пакеты не попадает. Откуда взять? Пересобрать gdb.
В том то и дело что в версии 7.5 и выше после сборки не обнаруживал libgdb.a - в 7.4 есть а в 7.5 нет, а если нет файла то и не с чем работать. Лажа какая-то: или сборка бинарника происходит без libgdb.a или он стирается перед окончанием сборки. Похоже в Makefile водятся привидения
-
alex_alex_alex1
- постоялец
- Сообщения: 207
- Зарегистрирован: 15.10.2010 14:08:50
Re: Прикручивание русского языка к FP в линуксе
Всё на месте http://pkgs.org/mageia-cauldron/mageia- ... 6.rpm.html - я его пересобирал как gdb-7.5-1.mrc.mga2.src.rpm ftp://ftp.mageialinux.ru/mageia2/construct/SRPMS/ - немного поправив спек.
Re: Прикручивание русского языка к FP в линуксе
Ну и как мне этот gdb-7.5.1-4.mga3.src.rpm собрать не устанавливая в систему? По ссылкам архивов с *.a файлами не обнаружено. Для меня ковыряние в С/перле такая же радость как для тебя в недрах fpc. Причём у меня есть смутное подозрение что если загружу в память всю эту ахинею придуманную сишниками то забуду ценные вещи из паскаля.
-
alex_alex_alex1
- постоялец
- Сообщения: 207
- Зарегистрирован: 15.10.2010 14:08:50
Re: Прикручивание русского языка к FP в линуксе
http://wiki.mageialinux.ru/index.php?title=Сборка_rpm-пакетов_в_Mageia
Глава IV.
Пересобрать не устанавливая.
Глава IV.
Пересобрать не устанавливая.
