|
Библиотеки Сторонние библиотеки для Blitz |
25.03.2012, 00:09
|
#1
|
Социал-сычевист
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений (для 1,359 пользователей)
|
KirpArc - очередной упаковщик
Всем привет.
Выкладываю на ваш суд свой небольшой проектец, плод работы одного дня.
Пакует и читает файлы из упаковки (архивом это назвать язык не поворачивается, так как не сжимает нихрена), стабильно работает, да и скорость ничего так.
З.ы. в проекте формат моделек а-ля MDL, т.е. все ресы и анимации в одном файле.
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Кирпи4 за это полезное сообщение:
|
|
25.03.2012, 00:11
|
#2
|
Социал-сычевист
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений (для 1,359 пользователей)
|
Ответ: KirpArc - очередной упаковщик
Впринципе можно попробовать его на пуряк перегнать, он тогда вообще шустрый будет
|
(Offline)
|
|
25.03.2012, 07:59
|
#3
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: KirpArc - очередной упаковщик
Если прогу запустить на семёрке из program files, не как админ, то не работает. С правами администратора работает.
Сначала я подумал, что это из-за того, что ты создаёшь временный файл при загрузке в той же папке проекта, а этого винда не терпит, сделал выгрузку в реальный темп системы
......
Local temp$ = GetEnv("TEMP")+"\"
st$ = temp + Handle(t)+"Temp"+t\tempc
......
но это не помогло, начал копать дальше. И выяснил, что без админских прав при открытии архива получаем размер файла 0. на скриншотах видно - имя файла нормально и там и там, а вот размер ноль.
Function ARC_Open(file$,pass%)
Local t.tarc = New TArc
f = ReadFile(file$)
If f=0 RuntimeError "ARC Lib:"+Chr(13)+"Can't find archive file!"
SeekFile f,pass+4
t\count = ReadShort(f)
For i=0 To t\count
t\files$[i] = ReadString(f)
t\size[i] = ReadInt(f)
t\pos[i] = FilePos(f)
SeekFile f,FilePos(f)+t\size[i]
Print ("file = "+t\files[i])
Print ("size = "+t\size[i])
Print ("pos = "+t\pos[i])
Next
t\f = f
Return Handle(t)
End Function
я не смог додуматься почему так происходит.
почему?
Ещё: судя по функции ExtractFileName$(sFilePath$) вложенные папки не поддерживаются, точнее одинаковые имена во вложенных папках. зачем это нужно? писал бы весь путь, и искал по целому пути, разницы же нет.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Жека за это полезное сообщение:
|
|
25.03.2012, 10:17
|
#4
|
Социал-сычевист
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений (для 1,359 пользователей)
|
Ответ: KirpArc - очередной упаковщик
Окей, сегодня попробую исправить все недочёты. А насчёт скорости есть какие-либо замечания?
UPD: Взялся писать папки. Апдейт будет ближе к вечеру.
Последний раз редактировалось Кирпи4, 25.03.2012 в 11:54.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.03.2012, 21:24
|
#5
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: KirpArc - очередной упаковщик
Скорость тут зависит от оборотов винта и есть ли антивирус проходом по массиву со сравнением строк я думаю можно пренебречь. В реалтайме один фиг никто не грузит в блитце, так что нормально.
Последний раз редактировалось Жека, 25.03.2012 в 21:25.
Причина: т9
|
(Offline)
|
|
26.03.2012, 01:20
|
#6
|
Социал-сычевист
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений (для 1,359 пользователей)
|
Ответ: KirpArc - очередной упаковщик
Блин, оболочку на B+ я откровенно затрахался писать, поэтому забросил. Пока что буду вести доработку только самого пакера.
Учтены все пожелания, добавлены папки (именно с ними затрах в оболочке). Теперь распаковывает в темп, плюс проверочка на одинаковые файлы в директориях.
|
(Offline)
|
|
26.03.2012, 06:43
|
#7
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: KirpArc - очередной упаковщик
На счёт графического интерфейса: можно и без него; например, паковать путём перетаскивания папки на ехе-шник, и на выходе получать архив имя_папки.arc. Плюс кроме перетаскивания можно сделать файл с настройками, из которого считывать: нужно ли паковать вложенные папки, типы файлов для упаковки или для исключения из упаковки (по расширению), пароли и т.д.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Жека за это полезное сообщение:
|
|
27.03.2012, 03:09
|
#8
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: KirpArc - очередной упаковщик
Теперь распаковывает в темп
|
Т.е. можно будет скомуниздить?
|
(Offline)
|
|
27.03.2012, 07:15
|
#9
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: KirpArc - очередной упаковщик
Не успеешь стырить, т.к. сразу после загрузки ресурсов следует их удаление.
(разве что спец. прогой, которая будет отслеживать изменения в папке, если такая есть).
|
(Offline)
|
|
27.03.2012, 15:17
|
#10
|
Нуждающийся
Регистрация: 05.10.2011
Адрес: Россия, Южно-Сахалинск
Сообщений: 66
Написано 42 полезных сообщений (для 83 пользователей)
|
Ответ: KirpArc - очередной упаковщик
Сообщение от Жека
Не успеешь стырить, т.к. сразу после загрузки ресурсов следует их удаление.
(разве что спец. прогой, которая будет отслеживать изменения в папке, если такая есть).
|
Тормозишь процесс каким-нибудь отладчиком (например OllyDBG) на CloseHandle и спокойно все копируешь.
Чтобы можно было читать\писать ресурсы напрямую, без темп-файлов, надо перехватить функции CreateFile ReadFile\WriteFile CloseHandle из Kernel32, т.к. очевидно что внутри всяких LoadMesh и подобных используется I\O сишного рантайма (msvcrt) - обертка над вышеуказанными winapi функциями.
Берешь хендл подгруженной в процесс kernel32
Kernel32 = GetModuleHandle ( "kernel32.dll" )
получаешь адрес нужной функции
CreateFileA = GetProcAddress ( Kernel32, "CreateFileA" )
и делаешь редирект на свою аналогичную функцию, например техникой сплайсинга - заменяешь в начале CreateFileA 6 байт
т.е. сохраняешь старые 6 байт (чтобы по окончании восстановить) и пишешь две инструкции
$63 - push
адрес_твоей_функции
$C3 - ret
Когда процесс вызовет эту функцию, благодаря записаному коду, он перепрыгнет на твою. Например в CreateFile по переданому имени определяешь файл в архиве, и если его нет - восстанавливаешь обратно оригинальные 6 байт и вызываешь родную CreateFile, сразу же заменяешь обратно.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Платон Александрович за это полезное сообщение:
|
|
27.03.2012, 17:59
|
#11
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: KirpArc - очередной упаковщик
Там у него удаляются не на закрытии проги, а после загрузки порции картинок, но суть та же.
Платон Александрович, кто ты такой? Поражаешь меня знанием всяких тонкостей/внутренностей.
|
(Offline)
|
|
27.03.2012, 18:00
|
#12
|
Социал-сычевист
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений (для 1,359 пользователей)
|
Ответ: KirpArc - очередной упаковщик
Эмм, а не слишком ли это круто
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
29.03.2012, 10:38
|
#13
|
Нуждающийся
Регистрация: 05.10.2011
Адрес: Россия, Южно-Сахалинск
Сообщений: 66
Написано 42 полезных сообщений (для 83 пользователей)
|
Ответ: KirpArc - очередной упаковщик
Сообщение от Жека
Платон Александрович, кто ты такой? Поражаешь меня знанием всяких тонкостей/внутренностей.
|
даж и незнаю что ответить Те кто на blitzgames.vov.ru и blitz.pp.ru был меня нарно еще помнят
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Платон Александрович за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:13.
|