На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
В этом разделе можно создавать темы, которые относятся к поколению 32-битных компиляторов.
Здесь решаются вопросы портирования кода из старого доброго Турбо Паскаля в FPC, TMT, VP, GPC компиляторы, а также особенностей программирования на них для Windows/Linux и других ОС.
Указывайте тип компилятора, его версию, а также платформу (Windows/Linux/..) компиляции, другими словами, Target.
Модераторы: volvo877
  
> QuickLZ на pascal , Помогите завершить перенос с C на Pascal
    Помогите завершить перенос с C на Pascal.
    Вот исходники и модуль на TMT Pascal:
    QuickLZ v.1.5.0 (QuickLZ.com)
    (я использовал QLZ_COMPRESSION_LEVEL = 1)
    Прикреплённый файлПрикреплённый файлquicklz_pas.zip (3,04 Кбайт, скачиваний: 193)
    Прикреплённый файлПрикреплённый файлquicklz.zip (20,23 Кбайт, скачиваний: 198)
      У кого-нибудь есть идеи, как исправить модуль, чтоб он правильно работал, а то автор quicklz не хочет помочь в переносе на pascal компилятор
        Значит, смотри... У меня TMT нет (я использую FPC) и ставить себе я его не буду. Так что все то, что последует ниже - это только из просмотра исходников.

        1) конструкции типа
        ExpandedWrap disabled
          type
             pointer_ptr = ^pointer;
             qlz_state_compress_ptr = ^qlz_state_compress;
             qlz_state_decompress_ptr = ^qlz_state_decompress;
        в коде на фиг не нужны. И вместо того, чтоб передавать указатель на pointer и указатель на структуру в функцию, к примеру, update_hash_upto, ее можно описать так:
        ExpandedWrap disabled
          procedure update_hash_upto (var state : qlz_state_decompress;
                                      var lh : pointer; max : pointer);
        , и избавиться от ненужных разыменований.

        2) Не все так гладко, как хотелось бы в qlz_compress_core. Ты (по ошибке, видимо) перевел не тот кусок, который нужен:
        ExpandedWrap disabled
          #ifdef X86X64
             // надо вот этот
          #else
             // а у тебя - вот этот
          #endif


        3) я бы вместо подобных конструкций ui32 ( dst^ ) := ... делал бы так: pui32 (dst)^ := ..., а может быть - вообще бы избавился от src:Pointer и dst:Pointer, а сделал бы их бестиповыми параметрами (просто var src, dst), но это уже надо смотреть дальше, что там в остальных функциях творится

        4) полностью откомпилировать и проверить твой проект не могу, потому как в qlz_compress_core у тебя используется ptr, на что мне FPC справедливо выдает ошибку о несоответствии числа параметров.
          Есть ещё непонятные для меня конструкции в конце функции qlz_compress

          *destination |= (QLZ_COMPRESSION_LEVEL << 2);
          *destination |= (1 << 6);
          *destination |= ((QLZ_STREAMING_BUFFER == 0 ? 0 : (QLZ_STREAMING_BUFFER == 100000 ? 1 : (QLZ_STREAMING_BUFFER == 1000000 ? 2 : 3))) << 4);

          Непонятно, destination присваивается unsigned char или что-то другое
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,1558 ]   [ 19 queries used ]   [ Generated: 26.04.24, 19:10 GMT ]