Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > Библиотеки

Библиотеки Сторонние библиотеки для Blitz

Ответ
 
Опции темы
Старый 25.03.2012, 00:09   #1
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,359 пользователей)
KirpArc - очередной упаковщик

Всем привет.
Выкладываю на ваш суд свой небольшой проектец, плод работы одного дня.

Пакует и читает файлы из упаковки (архивом это назвать язык не поворачивается, так как не сжимает нихрена), стабильно работает, да и скорость ничего так.

З.ы. в проекте формат моделек а-ля MDL, т.е. все ресы и анимации в одном файле.
Вложения
Тип файла: rar KirpArc.rar (337.8 Кб, 723 просмотров)
__________________


(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Кирпи4 за это полезное сообщение:
Артем Валерьевич (25.03.2012), LLI.T.A.L.K.E.R. (25.03.2012), St_AnGer (25.03.2012)
Старый 25.03.2012, 00:11   #2
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 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$) вложенные папки не поддерживаются, точнее одинаковые имена во вложенных папках. зачем это нужно? писал бы весь путь, и искал по целому пути, разницы же нет.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 1027
Размер:	19.7 Кб
ID:	16486  Нажмите на изображение для увеличения
Название: 2.png
Просмотров: 1025
Размер:	22.3 Кб
ID:	16487  
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Жека за это полезное сообщение:
Артем Валерьевич (25.03.2012), L-ee-X (25.03.2012)
Старый 25.03.2012, 10:17   #4
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,359 пользователей)
Ответ: KirpArc - очередной упаковщик

Окей, сегодня попробую исправить все недочёты. А насчёт скорости есть какие-либо замечания?

UPD: Взялся писать папки. Апдейт будет ближе к вечеру.
__________________



Последний раз редактировалось Кирпи4, 25.03.2012 в 11:54.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (27.03.2012)
Старый 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
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,359 пользователей)
Ответ: KirpArc - очередной упаковщик

Блин, оболочку на B+ я откровенно затрахался писать, поэтому забросил. Пока что буду вести доработку только самого пакера.

Учтены все пожелания, добавлены папки (именно с ними затрах в оболочке). Теперь распаковывает в темп, плюс проверочка на одинаковые файлы в директориях.
Вложения
Тип файла: rar KirpArc.rar (2.0 Кб, 710 просмотров)
__________________


(Offline)
 
Ответить с цитированием
Старый 26.03.2012, 06:43   #7
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: KirpArc - очередной упаковщик

На счёт графического интерфейса: можно и без него; например, паковать путём перетаскивания папки на ехе-шник, и на выходе получать архив имя_папки.arc. Плюс кроме перетаскивания можно сделать файл с настройками, из которого считывать: нужно ли паковать вложенные папки, типы файлов для упаковки или для исключения из упаковки (по расширению), пароли и т.д.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Жека за это полезное сообщение:
Артем Валерьевич (26.03.2012), L-ee-X (26.03.2012)
Старый 27.03.2012, 03:09   #8
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 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 пользователя(ей) сказали Спасибо Платон Александрович за это полезное сообщение:
johnk (27.03.2012), Жека (27.03.2012)
Старый 27.03.2012, 17:59   #11
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: KirpArc - очередной упаковщик

Там у него удаляются не на закрытии проги, а после загрузки порции картинок, но суть та же.

Платон Александрович, кто ты такой? Поражаешь меня знанием всяких тонкостей/внутренностей.
(Offline)
 
Ответить с цитированием
Старый 27.03.2012, 18:00   #12
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 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 пользователя(ей) сказали Спасибо Платон Александрович за это полезное сообщение:
Артем Валерьевич (28.02.2014), Жека (29.03.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 19:34.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com