Пакет GPAManager v1.22
Дата: 9 января 2002г.

    Этот пакет в первую очередь может пригодиться разработчикам игр, т.е. тем, кто при производстве программ использует большое количество всевозможных ресурсов - графики, звуков и т.д. Однако не дело уподобляться ребятам, сделавшим Worms Armageddon, и держать все ресурсы в сотнях (а это далеко не предел) файлах. На мой взгляд, гораздо экономичнее , хотя и не всегда удобнее, хранить все в одном архиве, или всевдо архиве (в зависимости от того, используется ли в них сжатие). Вот с этой целью и был создан GPAManager. Суть его сводится к следующему. На стадии разработки Вы формируете архив(ы) GPA с помощью GPAManager.exe, запаковывая в них все необходимые ресурсы. А уже в процессе работы Вашей программы Вы, подключая необходимые функции из библиотеки GPASpec.dll осуществляете доступ к своим запакованым ресурсам.

Доступные функции:

function GPACreateArchive(GPAName: PChar): LongInt;
Создает новый архив с именем GPAName. Возвращает 0, если открытие прошло успешно. Поскольку одновременно может быть открыт только один архив, перед открытием нового архива необходимо закрыть предыдущий (GPACloseArchive)

function GPACloseArchive(Save: Boolean): LongInt;
Закрывает текущий архив. Если флаг Save имеет значение True, перед закрытием архив сохраняется

function GPALoadArchive(GPAName: PChar): LongInt;
Загружает архив и именем GPAName. Возвращает 0, если открытие прошло успешно

function GPASaveArchive: LongInt;
Сохраняет текущий архив

function GPAGetArchiveSize: LongInt;
Возвращает суммарный сжатый размер хранящихся файлов. Если файлов нет, возвращает -1

function GPAGetArchiveRealSize: LongInt;
Возвращает суммарный реальный размер всех хранящихся файлов. Если файлов нет, возвращает -1

function GPAGetTotalFiles: LongInt;
Возвращает общее количество хранящихся файлов

function GPAArchiveChanged: Boolean;
Возвращает True, если архив после открытия/создания был подвержен изменениям (добавление, удаление файлов и т.д)

function GPAArchiveActive: Boolean;
Возвращает True, если архив открыт

function GPAGetArchiveName: PChar;
Возвращает имя текущего открытого архива

function GPAAddFromFile(AddName: PChar): LongInt;
Добавляет в архив файл с именем AddName с диска

function GPAAddFromStream(FIn: PStream; FSize: LongInt; FFName: PChar): LongInt;
Добавляет в архив файл из потока FIn. Необходимо указать объем чмтаемых данных (например FIn.Size), и имя, под которым файл будет храниться

function GPAExtractToFileByID(id: LongInt; FFName: PChar): LongInt;
Извлекает файл с индексом id на диск под именем FFName

function GPAExtractToStreamByID(id: LongInt; var FOut: PStream): LongInt;
Извлекает файл с индексом id в поток FOut

function GPAGetIDByName(FName: PChar; SCase: Boolean): Integer;
Возвращает индекс файла с именем FName. Параметр SCase определяет чуствительность к регистру при поиске имени.

function GPAGetNameByID(id: LongInt): PChar;
Возвращает имя файла с индексом id

function GPAGetSizeByID(id: LongInt): LongInt;
Возвращает сжатый размер файла с индексом id

function GPAGetRealSizeByID(id: LongInt): LongInt;
Возвращает реальный размер файла с индексом id

function GPARenameByID(id: LongInt; FName: PChar): LongInt;
Задает файлу с индексом id новое имя FName

function GPADeleteByID(id: LongInt): LongInt;
Удаляет файл с индексом id

Пример

  Создать архив TEST.GPA, и добавить в него файл new.bmp
begin
  GPACreateArchive('test.gpa');
  GPAAddFromFile('new.bmp');
  GPACloseArchive(True);
end;

Примечания

Для получения доступа к функциям GPASpec.dll, в раздел USES Вашей программы необходимо добавить модуль GPAHeader. Кроме того, не все части пакета работают корректно, так-что в случае возникновения ошибки №216 ("Access violation"), попробуйте добавить модуль ShareMem

Автор: Михаил Бесчетнов
Web: http://extractor.far.ru