Страница 17 из 35

Добавлено: 19.01.2008 23:35:06
Attid
B4rr4cuda
У кого какие мысли?

как костыль можно дерективы поставить, как решение премер на 2 кнопки и в трекер.

Добавлено: 20.01.2008 00:39:46
Alexx2000
B4rr4cuda писал(а):Это работает также под GTK и GTK2.
Точнее работает, но не совсем коректно...

У кого какие мысли?

Раньше без синхронизации под гтк сразу падало или висло. Вот тогда я намучался :( Конечно это баг Лазаруса, надо им в баг трекер закинуть, если еще нету. Надо чтобы везде работало одинаково.

Добавлено: 20.01.2008 00:58:04
B4rr4cuda
Закоментировал синхронизы в uCopyThread и uMoveThread - отлично работает под qt.
Пока лазаровцы не наладили можно, как костылик, использовать:
в make.sh

Код: Выделить всё

if [ "$lcl" = "qt" ]
 then
  rm interface.inc
  echo "{\$DEFINE QT}">interface.inc
fi


в каждый проблемный файл

Код: Выделить всё

{$I interface.inc}

и в проблемные места:

Код: Выделить всё

 {$IFDEF QT}
     FFileOpDlg.UpdateDlg;
    {$ELSE}
     synchronize(@FFileOpDlg.UpdateDlg);
    {$ENDIF}

Добавлено: 20.01.2008 01:07:34
B4rr4cuda
Туплю.
В make.sh просто

Код: Выделить всё

rm interface.inc 
echo "{\$DEFINE $lcl}">interface.inc

Добавлено: 21.01.2008 11:55:36
B4rr4cuda
Во первых, наваял скриптик для автоматической адаптации DC для QT.
Копируем код ниже в файлик в каталог DC, права на исполнение, запускаем.
(!) Больше одного раза не запускать.
Потом компилим патченый код под qt. Все потоковые операции работают коректно.
Если нужно скомпилить под гтк или гтк2 в interface.inc вместо
{$DEFINE QT} указываем {$DEFINE GTK} или что-то другое.
Вновь нужно под qt - указываем {$DEFINE QT}.
Скрипт заново запускать НЕ надо!

Код: Выделить всё

#!/usr/bin/perl -w

`rm interface.inc;echo '{\$DEFINE QT\}'>interface.inc`;

@list=`ls *.pas`;

foreach (@list)
{


#удаляем левые символы и выставляем выходное расширение
$fon=$_;
$fon=~s/\n//;
$fon=$`;
$fon=~s/\r//;

`cp $fon $fon.bak`;

$fon=$`.".bak";

open( FIN,"<$fon");
open( FOUT,">$_");

while ($str=<FIN>)
{
$str=~s/\n//;
$str=$`;
$str=~s/\r//;
$str=$`;

#Включаем инклуд
$rez=$str=~m/\{\$H\+\}/;
if ($rez)
{
  $str.="\n\{\$I interface.inc\}\n"
}

 #поиск
 $rez=$str=~m/.*Synchronize\(.*\@/;#@*

#если строка найдена
if ($rez)
  {
    #Присваиваем переменым найденые значеня
    $func=$';
    $sync=$&;

    #Повторный поиск и отделяем мух от котлет
    $rez=$func=~m/\)\;/;
    if ($rez)
    {
      $func=$`;
      $str= "{\$IFDEF QT}\n\t$func;\n{\$ELSE}\n\t$sync$func);\n{\$ENDIF}\n";
    }
  }
    print FOUT "$str\n";
}
close(FIN);
close(FOUT);
}


А во вторых - понравился лог. Очень удобно, красиво и функционально! :)

Добавлено: 21.01.2008 16:24:04
mpyat2
По поводу появления пустого имени файла:
у меня в директории есть файл "file:" (с двоеточием в конце). Я заметил, что если в имени файла двоеточие, то откусыается все до него, включая его самоё :-).
Видимо, это баг FindFirst/FindNext. Попытаюсь исследовать глубже.

Добавлено: 22.01.2008 06:38:03
B4rr4cuda
2mpyat2
Возможно проблема в модуле uDCUtils или где-то рядом, в частности в этом модуле многие функции а-ля ExtractOnlyFileName удаляют символы разделители ( ['.', '/', '\', ':']), и двоеточие включено в них. Также ищется включение DriveDelim, который тоже является ':'.

Добавлено: 22.01.2008 08:27:50
B4rr4cuda
Нашел.
mpyat2 оказался прав. Функция FindNext возвращает обрезанное имя файла, если в имени есть двоеточие. Имя обрезается в
FindNext ()->FindGetFileInfo()->ExtractFileName()->
fina.inc строка 82

Код: Выделить всё

while (I > 0) and not (FileName[I] in ['/', '\', ':']) do Dec(I);
Result := Copy(FileName, I + 1, MaxInt);

Обратите внимание на двоеточие в set-е.

Добавлено: 22.01.2008 10:50:44
Attid
отправил в трекер

как временое решение сделать примерно так

Код: Выделить всё

{ifdef linux}
while (I > 0) and not (FileName[I] in ['/', '\']) do Dec(I);
{else}
while (I > 0) and not (FileName[I] in ['/', '\', ':']) do Dec(I);
{endif}
Result := Copy(FileName, I + 1, MaxInt);


и пересобрать фпц

Добавлено: 22.01.2008 12:34:45
B4rr4cuda
Может включить FindFirst/FindNext функции в DC, чтобы не зависеть от багов фпцешников?

Добавлено: 22.01.2008 13:48:36
B4rr4cuda
Перекомпилил fpc с поправкой {$ifdef .... отображает теперь нормально, но операции копирования\перемещения теперь вопрошают "Недостаточно места на диске продолжить?" и, если согласиться копируют с удвоением имени файла до двоеточия:
было new:111.txt, скопировалось, как new:new:111.txt.

Добавлено: 22.01.2008 14:13:17
Alexx2000
Сриптик надо добавить в SVN.
Может включить FindFirst/FindNext функции в DC, чтобы не зависеть от багов фпцешников?

Кстати думал об этом, правда по другой причине:
Чтобы атрибуты под Линуксом возвращал не всякие там faReadOnly, faArchive (которые под Линуксом имеют мало смысла), а типа rwxrwxrwx. Не охота везде IFDEF'ы пихать. В модуле uFindEx сделал даже небольшой hack так, сказать для этого, но криво это как то.

Добавлено: 22.01.2008 18:24:15
B4rr4cuda
Сриптик надо добавить в SVN.

Только предупреждение о двойном запуске добавь, а то мешанина {$IFDEF} на выходе будет.

Чтобы атрибуты под Линуксом возвращал не всякие там faReadOnly, faArchive (которые под Линуксом имеют мало смысла), а типа rwxrwxrwx.

Очень правильная мысль. Плюс к этому не каждый фпц перекомпилить будет (да и умеет, если откровенно). На днях, один кадр, проприетарные дрова ати ставил, а они с дри в ядре конфликтуют, надо ядро перекомпилить. Он, как об этом узнал, вообще от идеи отказался, под vesa-ой сидит, *здесь была матерная фраза*. *убунты уничтожают новообращеным мозг. Грустно.
А юникод сейчас популярен. И фм просто обязан с ним правильно работать.

Добавлено: 22.01.2008 20:15:28
Attid
B4rr4cuda писал(а):
Сриптик надо добавить в SVN.

Только предупреждение о двойном запуске добавь, а то мешанина {$IFDEF} на выходе будет.

а может все таки выполнить скрипт один раз и все ? в будущем много еще каких директив может понадобиться только interface.inc переименовать в dc.inc хотя это не важно.

Чтобы атрибуты под Линуксом возвращал не всякие там faReadOnly, faArchive (которые под Линуксом имеют мало смысла), а типа rwxrwxrwx.

а можно переписать и отправить в фпц =)

Добавлено: 23.01.2008 00:14:50
Alexx2000
а может все таки выполнить скрипт один раз и все ? в будущем много еще каких директив может понадобиться только interface.inc переименовать в dc.inc хотя это не важно.

Сам не знаю как лучше, а когда поправят это дело, опять писать скриптик который будет убирать IFDEF'ы?
а можно переписать и отправить в фпц =)

Ну FindFirst, FindNext они менять не будут, потеряется совместимость. А вот дополнительные функции можно было бы добавить.