Вверх ↑
Этот топик читают: Гость
Ответов: 207
Рейтинг: 14
#451: 2020-05-04 11:51:42 ЛС | профиль | цитата
В ArrayFilterRepeats не работает ArrayFilter. В FPC-32,64,32U,64U.

Редактировалось 5 раз(а), последний 2020-05-04 13:08:33
карма: 2

0
Ответов: 4621
Рейтинг: 746
#452: 2020-05-05 11:48:36 ЛС | профиль | цитата
Работает, только не отсортирован массив.
карма: 26

0
Ответов: 207
Рейтинг: 14
#453: 2020-05-05 15:35:56 ЛС | профиль | цитата
Netspirit писал(а):
Работает, только не отсортирован массив.

Да
Netspirit, Не подскажешь почему не хочет работать MultiBlockFind в Unicode например с такой строкой
<h4>Hiasm</h4><p>’


Add(MainForm,8301255,49,56)
{
Width=327
Height=271
}
Add(Button,6013603,49,133)
{
Left=5
link(onClick,8411288:doMultiBlockFind,[])
}
Add(MultiBlockFind,8411288,126,133)
{
Count=8
TagList="{**s}<h4>{**x}</h4>{**e}"
link(Text,2182914:Text,[])
link(onResult1,4212924:doAdd,[])
}
Add(Memo,4212924,210,133)
{
Left=5
Top=25
Width=300
Height=205
Ctl3D=1
ScrollBars=3
InCharset=4
}
Add(StrList,2182914,126,56)
{
Strings=#18:<h4>Hiasm</h4><p>’|
InCharset=4
OutCharset=3
}

карма: 2

0
Ответов: 207
Рейтинг: 14
#454: 2020-05-05 17:34:54 ЛС | профиль | цитата
Netspirit, В RegExpr.pas строка 704 {$ifndef KOL3XX} думаю была написана еще до юникода, и сейчас из-за нее нормально не работают регулярки в Unicode.
Посмотри пожалуйста, она блокирует {$IFDEF UniCode}
карма: 2

0
Ответов: 4621
Рейтинг: 746
#455: 2020-05-05 18:25:26 ЛС | профиль | цитата
Joiner писал(а):
почему не хочет работать MultiBlockFind
Падает в бесконечный цикл. Надо разбираться.
Joiner писал(а):
и сейчас из-за нее нормально не работают регулярки в Unicode
А без неё? Дай неработающую схему. У меня, вроде, когда тестировал, работало.

Редактировалось 1 раз(а), последний 2020-05-05 18:28:29
карма: 26

0
Ответов: 207
Рейтинг: 14
#456: 2020-05-05 18:56:26 ЛС | профиль | цитата
Netspirit писал(а):
А без неё?

Без нее отлично.
Вот сделал пример
Должна быть строка без 01 в начале и 2 в конце.

Add(MainForm,8301255,91,126)
{
Width=327
Height=271
}
Add(Button,6013603,77,203)
{
Left=5
link(onClick,7643679:doConvert,[])
}
Add(Memo,4212924,280,203)
{
Left=5
Top=25
Width=300
Height=205
Ctl3D=1
ScrollBars=3
InCharset=4
}
Add(StrList,2182914,154,126)
{
Strings=#22:3031CEB1CEB2CEB3CEB432|
InCharset=4
OutCharset=3
}
Add(RE_Replace,16168177,210,203)
{
Expression=".*?1(.*?)2"
ReplaceStr="$1"
link(onReplace,4212924:doAdd,[])
}
Add(StreamConvertor,7643679,154,203)
{
Mode=3
Symbol=""
Charset=5
Point(Data)
link(onResult,16168177:doReplace,[])
link(Data,2182914:Text,[])
}
карма: 2

0
Ответов: 4621
Рейтинг: 746
#457: 2020-05-05 19:15:06 ЛС | профиль | цитата
Разбираюсь.

--- Добавлено в 2020-05-05 20:01:55

В StreamConvertor поставь Charset=Compiler.

Исправить функции StrLComp() в файле HiAsm\compiler\FPC2\src\packages\KOLx64\kol.pas.

Строка 22713:


function StrLComp(const Str1, Str2: PAnsiChar; MaxLen: Cardinal): Integer;
var
S1, S2: PAnsiChar;
begin
S1 := Str1;
S2 := Str2;
while (S1^ <> #0) and (S2^ <> #0) and (MaxLen > 0) do
begin
Result := Ord(S1^) - Ord(S2^);
if Result <> 0 then Exit;
Inc(S1);
Inc(S2);
Dec(MaxLen);
end;
Result := Ord(S1^) - Ord(S2^);
end;

Строка 22969:


function StrLComp(const Str1, Str2: PWideChar; MaxLen: Cardinal): Integer;
var
S1, S2: PWideChar;
begin
S1 := Str1;
S2 := Str2;
while (S1^ <> #0) and (S2^ <> #0) and (MaxLen > 0) do
begin
Result := Ord(S1^) - Ord(S2^);
if Result <> 0 then Exit;
Inc(S1);
Inc(S2);
Dec(MaxLen);
end;
Result := Ord(S1^) - Ord(S2^);
end;

После исправления выполнить файлы:

HiAsm\compiler\FPC2\src\_make_KOL.bat
HiAsm\compiler\FPC2\src\_make_KOL_uni.bat


Редактировалось 2 раз(а), последний 2020-05-05 20:01:55
карма: 26

0
Ответов: 207
Рейтинг: 14
#458: 2020-05-05 20:48:45 ЛС | профиль | цитата
Netspirit, Поисправлял, если вернуть в RegExpr.pas {$ifndef KOL3XX}. все равно не хочет у меня работать.
Буду уже ждать обновления.
Netspirit писал(а):
В StreamConvertor поставь Charset=Compiler.

У меня при Compiler так почему-то
+
карма: 2

0
Ответов: 4621
Рейтинг: 746
#459: 2020-05-05 22:07:57 ЛС | профиль | цитата
Joiner писал(а):
У меня при Compiler так почему-то
Извиняюсь, Charset=ANSI. В общем, нужно учитывать в какой кодировке твои данные в HEX. Там в текстовых файлах в архиве есть информация.
карма: 26

0
Ответов: 1342
Рейтинг: 31
#460: 2020-05-05 22:43:16 ЛС | профиль | цитата
нужны правки ASM в BenchmarkCPU и BenchmarkRAM, ошибки при компиляции, замена E на R не прокатывает)
карма: 2

0
Ответов: 4621
Рейтинг: 746
#461: 2020-05-06 14:19:30 ЛС | профиль | цитата
Rysik писал(а):
замена E на R не прокатывает
Во-о-о-т, а ты у нас уже понемногу в ассемблере начинаешь разбираться (в отличие от меня). Так что - вперед.
карма: 26

0
Ответов: 1342
Рейтинг: 31
#462: 2020-05-06 23:34:14 ЛС | профиль | цитата
Netspirit писал(а):
Во-о-о-т, а ты у нас уже понемногу в ассемблере начинаешь разбираться (в отличие от меня). Так что - вперед.



неее , всё что известно, дак это смена регистров с E на R, но там же ещё и функции разные есть под 32 и 64))
карма: 2

0
Ответов: 4621
Рейтинг: 746
#463: 2020-05-07 10:51:58 ЛС | профиль | цитата
Функции отличаются типами аргументов и результата, это делается прозрачно при смене компилятора (без смены названия функций).

В ассемблере для 64 бит отличаются регистры, в которых приходят аргументы функций.
карма: 26

0
Ответов: 1342
Рейтинг: 31
#464: 2020-05-07 12:45:28 ЛС | профиль | цитата
почему тогда просто смена регистров не помогает?
карма: 2

0
Ответов: 4621
Рейтинг: 746
#465: 2020-05-07 14:28:03 ЛС | профиль | цитата
Rysik писал(а):
почему тогда просто смена регистров не помогает?
Отличаются регистры, в которых приходят аргументы в функцию, и те, содержимое которых надо сохранять.

Под "функции разные" я понял что речь шла о функциях, вызываемых по имени из ASM-кода. Если имелось в виду сами ассемблерные функции, то понятно что для 32 и 64 бит это должны быть отдельные варианты, включаемые с помощью {$ifdef ...}{$else}{$endif}.

Редактировалось 1 раз(а), последний 2020-05-07 14:28:20
карма: 26

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)