Приветствую Вас Гость | RSS


Главная страница » xTRD плугин для FAR'а - ZX-Форум » Регистрация » ВходЧетверг
2017-08-17
06:43:06
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
ZX-Форум » Software » Utilities » xTRD плугин для FAR'а (исправил вот глюки с контрольными суммами)
xTRD плугин для FAR'а
deathsoftДата: Четверг, 2009-11-26, 01:01:17 | Сообщение # 1
Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 1587
Репутация: 9
Статус: Offline
http://dlcorp.ucoz.ru/load/0-0-0-53-20

Говнокод был в следующем:
DWORD calculateCheckSum(BYTE* ptr, WORD size);
WORD crc(BYTE* ptr, WORD len);

длина была WORD - 16 бит, поэтому все и обламывалось если размер блока превышал 64кб.

Ну и вот это еще под вопросом:
DWORD checkSum = 0x255 + noFilesWritten (переменная типа байт);

Сумма двух байтов - дает байт

исправил на:
DWORD checkSum = 0x255UL + DWORD(noFilesWritten);

P.S. Полагаю что в следствие копипаста в остальных плугинах могут быть такиеже глюки (например в xSCL).

Сообщение отредактировал deathsoft - Четверг, 2009-11-26, 01:02:46
 
deathsoftДата: Четверг, 2009-11-26, 21:52:50 | Сообщение # 2
Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 1587
Репутация: 9
Статус: Offline
Как я и думал, в xSCL используется тотже самый tools.cpp с глючным расчетом контрольных сумм. Исправленую версию выложу здесь.

Нашел еще один глюк, в самопальной реализации memcmp:

Code

int memcmp(const BYTE* p1, const BYTE* p2, int maxlen)
{
     if(!maxlen) return(0);
     while(maxlen-- && *p1 == *p2) { p1++; p2++; }
     return(*p1 - *p2);
}

При равенстве блоков - функция возвращает разность мусора вылезающего на 1 байт за конец сравниваемых блоков (должно быть --maxlen).

Т.ч. предыдущий плугин требует перекомпиляции и перезаливки.

Перезалил xTRD (ссылка старая).

Залил xSCL: http://dlcorp.ucoz.ru/load/0-0-0-54-20

Сообщение отредактировал deathsoft - Четверг, 2009-11-26, 23:25:11
 
deathsoftДата: Пятница, 2009-11-27, 12:49:43 | Сообщение # 3
Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 1587
Репутация: 9
Статус: Offline
Авторы, проверьте остальные плугины на предмет этих же ошибок, наверняка они и там есть, если так, то исправьте перекомпилите и выложите на сайт новые версии dll.
 
lvdДата: Пятница, 2009-11-27, 14:39:23 | Сообщение # 4
Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 2528
Репутация: 13
Статус: Offline
Quote (deathsoft)
DWORD checkSum = 0x255 + noFilesWritten (переменная типа байт);

Сумма двух байтов - дает байт


А ничего, что 0x255 - кагбе не байт?


Многого нет здесь: http://lvd.nedopc.com

Сообщение отредактировал lvd - Пятница, 2009-11-27, 14:40:11
 
aloneДата: Пятница, 2009-11-27, 16:21:33 | Сообщение # 5
Осваивается
Группа: Человеки
Сообщений: 39
Репутация: 3
Статус: Offline
Это 'S'+'I'+'N'+'C'+'L'+'A'+'I'+'R'. Естественно, не байт.
 
deathsoftДата: Пятница, 2009-11-27, 17:16:36 | Сообщение # 6
Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 1587
Репутация: 9
Статус: Offline
Quote (lvd)
А ничего, что 0x255 - кагбе не байт?

Да я уж давно просек это, но и не факт что 4 байта, т.ч. UL не помешает.
 
ZX-Форум » Software » Utilities » xTRD плугин для FAR'а (исправил вот глюки с контрольными суммами)
Страница 1 из 11
Поиск:

the DLCorp © 2006