Есть программа, работающая под 98-ой виндой (без всяких SE). Она общается с устройством через сетевую карту, используя собственный протокол. Производитель программы закрылся и новых версий не предвидится. Требуется создание драйвера поддержки этого протокола для Windows ...
Доработка архиватора ARJ под Linux
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.
Уникальная возможность засветить своё имя в веках и помочь человечеству для программистов на СИ.
В старом уникальном своими возможностями архиваторе ARJ есть возможности (красивое создание инкрементальных резервных копий), которые нигде до сих пор красиво не реализованы (chapters).
Они мне понадобились и я готов выступить спонсором продолжения разработки.
Кодер также сможет добавить в привествие ARJ одну строку своей рекламы с указанием своего имени.
Исходный код можно взять здесь:
http://sourceforge.net/cvs/?group_id=49820
Нужно доработать код на Си (возможно ++. я не смотрел в точности на чём он написан) и доработать следующие вещи:
- поддержку архивов и файлов размером более 2 gb.
- корректное удаление произвольных chapter
Ну и заодно поправить мелкие баги (связанные с добавлением директорий и файлов):
http://sourceforge.net/tracker/?atid=457564&group_id=49820&func=browse
В итоге должна получиться версия под Линукс и Виндовс, обратно совместимая. Причём, для случаев маленьких архивов должен использоваться старый формат заголовка.
Вначале придумывается как это сделать, потом придумка утверждается мной и Андреем Беловым, а потом идёт кодинг.
В проект должна быть вставлена небольшая реклама спонсора (я сообщу позже какая именно).
Есть рекомендации и советы от администратора проекта Андрея Белова, который сможет помочь советом:
> ограничение на размер
> >архива?
В основном - в arj_arcv.c. Сейчас все позиции/размеры в файлах - это
long. Простое решение - повсеместный long long и замена "%ld", "%lu" в
спецификаторах printf'ов (см. resource/resource.txt) на "%lld", "%llu".
Идеологически правильный путь - использование типов fpos_t и внедрение
своей версии printf'а. Если платформа 64-bit, можно весь этот этап
пропустить - long уже 64-битный.
Далее, в архиве (рекомендую вооружиться описанием формата из UNARJ) есть
поля "сжатый размер" и "исходный размер" - compsize и origsize. Их мало
сделать long long'ами - нужно придумать аналоги hput_longword() и
hget_longword() для этих 64/128-битовых величин. Если совместимость со
внешним миром все-таки нужна, то есть три варианта записи этих полей в
заголовок:
1. Сначала писать в заголовки 32-битные compsize/origsize, а 64-bit
размер указывать после - тут проблема в том, что хвост заголовка уже
перегружен наспех добавленными полями atime/ctime.
2. Использовать extended header - потенциальные неприятности с
многотомными архивами.
3. Эвристический подход: использовать старые поля, но писать в них
delta-величины, как в UTF-32 или в MIDI. Этот вариант посложнее, но
самый совместимый и изящный. Если исходный несжатый файл больше, чем,
например, 0x7F000000 байт (но не 0x7FFFFFFFF - нужен запас 1-2% на
случай шифрования) - резервировать 8 байт под каждое поле, и первую
четверку писать со взведенным старшим битом. В заголовке самого архива
(формат - тот же, что и у заголовка файла) может храниться указатель на
хвост архива, соответственно знать о вероятности превышения размера 2G
нужно заранее. Для чего можно свериться с total_size и volume_limit.
Остальное - по мелочам. Есть довольно дурацкие константы
FIRST_HDR_SIZE_xxx, от которых пора избавиться. В arj_file.c убедиться,
что проверка на MAX_FILE_SIZE больше не срабатывает.
Вот такой примерный пересказ из TO-DO.TXT. ;)
> >и как организовать удаление промежуточных chapter'ов?
> >нужно чтобы при удалении чаптера файлы из него, которые были введены именно в нём и используются без изменений в следующем,
> >переходили в следующий.
> >скорее всего для быстрого удаления промежуточных чаптеров придётся ввести концепцию внешних чаптеров,
> >которые хранятся не в самом архиве, а во внешних файлах. типа: archiv.arj archiv.c00 archiv.c01
> >при удалении промежуточного внешнего чаптера последующие чаптеры должны переименовываться, чтобы номер был на единицу меньше
arj_user.c: process_archive(). Код весьма спагеттиобразный, но в
пределах своего знания реализации chapter'ов могу сориентировать, ежели
что.
> >и есть ли ограничения на размер архивируемого файла?
Да, те же 2G и по тем же причинам.
> Вы хотите, чтобы старые архиваторы могли распаковывать новые огромные
> >архивы с огромными файлами?
Нет, но если мы архивируем новой версией что-нибудь небольшое и
отправляем архив пользователю старого ARJ, он не должен ничего заметить.
Поскольку 99% архивов будут меньше 2G, а 80% используемых ARJ'ей - это
версия 2.41, то совместимость существовать обязана.
Выбранный исполнитель
Заявки фрилансеров
Похожие заказы
- Системное программирование11 заявокЗакрыт18 лет назад
Необходим демон по FreeBSD 6.0 RC1, который бы снимал с телефона, или ещё чего (GSM) SMS и складывал их в текстовый файл..
Системное программирование1 исполнительЗавершен18 лет назад- $1000
Программа должна быть написана на Visual Studio 2005 C++ Поддерживаемые платформы: Windows 98, Windows ME, Windows 2000, Windows XP Срок: 2 недели (в крайнем случае – 3 недели) ...
Системное программирование11 заявокЗакрыт18 лет назад Мне нужна программа под FreeBSD, которая бы снимала SMS с любого (тоесть пофигу какого GSM устройства) и складывала их в файл (текст.)
Системное программирование1 исполнительЗакрыт18 лет назад- $100
Необходимо разработать модуль для proftpd, который позволяет распаковывать .zip архивы после их закачки "на лету". ОС - FedoraCore 3,4,5 в системе установлен стандартный архиватор unzip
Системное программирование1 исполнительЗавершен18 лет назад - $500
Есть программа BTMSOFTWARE KEY CODE RECOVERY & REPAIR TOOLS DISK FOR WINDOWS (высылается) необходимо сделать аналог. Я думаю знания ассемблера пригодиться. Следующие функции ...
Системное программирование5 заявокЗакрыт18 лет назад - $100
Необходимо отправлять письма без использования локального mail/sendmail. Sendmail не устраивает, так как он не сообщает о доставке письма и откладывает письма в очередь. Нужна программа, которая будет работать с SMTP на низком уровне: определить ...
Системное программирование7 заявокЗакрыт18 лет назад Нужен раскодировщик скриптов с кодера ionCube. Оплата еголд, рупей.
Системное программирование5 заявокЗакрыт18 лет назадНужно написать программу, реализующую след. функции: 1) Все функции регистратуры поликлиники: - Запись на прием - Ведение базы пациентов. - Выписка и оплата счетов - Печать ...
Системное программирование53 заявкиЗакрыт18 лет назадИщем специалиста/компанию имеющих опыт написания драйверов устройств под Windows. Шина PCI. Устройство - компьютерная плата, которая обрабатывает входящий поток с сигналом. Существуют аналогичные драйвера и софт у конкурентов. ...
Системное программирование4 заявкиЗакрыт18 лет назад