[Extractor-gtk-cvslog] SF.net SVN: extractor-gtk: [56] trunk/extractor
Extract files from unusual archive formats
Brought to you by:
someone-guy
From: <som...@us...> - 2008-02-22 21:59:10
|
Revision: 56 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=56&view=rev Author: someone-guy Date: 2008-02-22 13:59:06 -0800 (Fri, 22 Feb 2008) Log Message: ----------- Add HalfLife PAK format Modified Paths: -------------- trunk/extractor/Makefile trunk/extractor/extractor.c trunk/extractor/formats.h Added Paths: ----------- trunk/extractor/pak.c Modified: trunk/extractor/Makefile =================================================================== --- trunk/extractor/Makefile 2008-02-19 21:22:54 UTC (rev 55) +++ trunk/extractor/Makefile 2008-02-22 21:59:06 UTC (rev 56) @@ -5,6 +5,7 @@ bloodrayne.c \ xtre.c \ wad.c \ + pak.c \ generic.c \ all: extractor Modified: trunk/extractor/extractor.c =================================================================== --- trunk/extractor/extractor.c 2008-02-19 21:22:54 UTC (rev 55) +++ trunk/extractor/extractor.c 2008-02-22 21:59:06 UTC (rev 56) @@ -23,6 +23,7 @@ &bloodrayne_fmt, &xtre_fmt, &wad_fmt, + &pak_fmt, &generic_fmt, NULL }; Modified: trunk/extractor/formats.h =================================================================== --- trunk/extractor/formats.h 2008-02-19 21:22:54 UTC (rev 55) +++ trunk/extractor/formats.h 2008-02-22 21:59:06 UTC (rev 56) @@ -29,6 +29,7 @@ extern const fmt_desc_t bloodrayne_fmt; extern const fmt_desc_t xtre_fmt; extern const fmt_desc_t wad_fmt; +extern const fmt_desc_t pak_fmt; extern const fmt_desc_t generic_fmt; #endif Added: trunk/extractor/pak.c =================================================================== --- trunk/extractor/pak.c (rev 0) +++ trunk/extractor/pak.c 2008-02-22 21:59:06 UTC (rev 56) @@ -0,0 +1,51 @@ +/** + * \file wad.c + * \brief routines for handling the HalfLife PAK archive files + * + * Copyright (C) 2008 Reimar Döffinger + * License: GPL v2 (see LICENSE file) + */ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <inttypes.h> +#include "formats.h" +#include "helpers.h" + +//! check if this is a PAK archive file (starts with PACK) +static int check_file(FILE *in) { + char sig[5] = {0}; + rewind(in); + fread(sig, 4, 1, in); + return strcmp(sig, "PACK") == 0; +} + +static file_t *get_list(FILE *in) { + file_t *list; + uint32_t count, tblpos; + int i; + rewind(in); + fseek(in, 4, SEEK_SET); + tblpos = read_le32(in); + count = read_le32(in) / 64; + if (count > MAX_FILES) count = MAX_FILES; + list = calloc(count + 1, sizeof(file_t)); + for (i = 0; i < count; i++) { + fseek(in, tblpos + 64 * i, SEEK_SET); + list[i].name = calloc(1, 57); + fread(list[i].name, 1, 56, in); + list[i].start = read_le32(in); + list[i].len = read_le32(in); + } + return list; +} + +const fmt_desc_t pak_fmt = { + "PAK (HalfLife)", + "PAK (*.pak)", + "*.pak;*.PAK", + check_file, + get_list, + default_free_list, + default_extract_file, +}; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |