aboutsummaryrefslogtreecommitdiff
path: root/tools/create_kyradat/pak.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/create_kyradat/pak.cpp')
-rw-r--r--tools/create_kyradat/pak.cpp250
1 files changed, 0 insertions, 250 deletions
diff --git a/tools/create_kyradat/pak.cpp b/tools/create_kyradat/pak.cpp
deleted file mode 100644
index 4179f42df0..0000000000
--- a/tools/create_kyradat/pak.cpp
+++ /dev/null
@@ -1,250 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-// Disable symbol overrides so that we can use system headers.
-#define FORBIDDEN_SYMBOL_ALLOW_ALL
-
-#include "pak.h"
-
-bool PAKFile::loadFile(const char *file, const bool isAmiga) {
- _isAmiga = isAmiga;
- if (!file)
- return true;
-
- delete _fileList;
- _fileList = 0;
-
- FILE *pakfile = fopen(file, "rb");
- if (!pakfile)
- return false;
-
- uint32 filesize = fileSize(pakfile);
-
- // TODO: get rid of temp. buffer
- uint8 *buffer = new uint8[filesize];
- assert(buffer);
-
- fread(buffer, filesize, 1, pakfile);
-
- fclose(pakfile);
-
- const char *currentName = 0;
-
- uint32 startoffset = _isAmiga ? READ_BE_UINT32(buffer) : READ_LE_UINT32(buffer);
- uint32 endoffset = 0;
- uint8* position = buffer + 4;
-
- while (true) {
- uint32 strlgt = strlen((const char*)position);
- currentName = (const char*)position;
-
- if (!(*currentName))
- break;
-
- position += strlgt + 1;
- endoffset = _isAmiga ? READ_BE_UINT32(position) : READ_LE_UINT32(position);
- if (endoffset > filesize) {
- endoffset = filesize;
- } else if (endoffset == 0) {
- endoffset = filesize;
- }
- position += 4;
-
- uint8 *data = new uint8[endoffset - startoffset];
- assert(data);
- memcpy(data, buffer + startoffset, endoffset - startoffset);
- addFile(currentName, data, endoffset - startoffset);
- data = 0;
-
- if (endoffset == filesize)
- break;
-
- startoffset = endoffset;
- }
-
- delete[] buffer;
- return true;
-}
-
-bool PAKFile::saveFile(const char *file) {
- if (!_fileList)
- return true;
-
- FILE *f = fopen(file, "wb");
- if (!f) {
- error("couldn't open file '%s' for writing", file);
- return false;
- }
-
- // TODO: implement error handling
- uint32 startAddr = _fileList->getTableSize()+5+4;
- static const char *zeroName = "\0\0\0\0\0";
-
- uint32 curAddr = startAddr;
- for (FileList *cur = _fileList; cur; cur = cur->next) {
- if (_isAmiga)
- writeUint32BE(f, curAddr);
- else
- writeUint32LE(f, curAddr);
- fwrite(cur->filename, 1, strlen(cur->filename) + 1, f);
- curAddr += cur->size;
- }
- if (_isAmiga)
- writeUint32BE(f, curAddr);
- else
- writeUint32LE(f, curAddr);
- fwrite(zeroName, 1, 5, f);
-
- for (FileList *cur = _fileList; cur; cur = cur->next)
- fwrite(cur->data, 1, cur->size, f);
-
- fclose(f);
- return true;
-}
-
-void PAKFile::drawFileList() {
- FileList *cur = _fileList;
- while (cur) {
- printf("Filename: '%s' size: %d\n", cur->filename, cur->size);
- cur = cur->next;
- }
-}
-
-bool PAKFile::outputAllFiles() {
- FileList *cur = _fileList;
- while (cur) {
- FILE *file = fopen(cur->filename, "wb");
- if (!file) {
- error("couldn't open file '%s' for writing", cur->filename);
- return false;
- }
- printf("Exracting file '%s'...", cur->filename);
- if (fwrite(cur->data, 1, cur->size, file) == cur->size) {
- printf("OK\n");
- } else {
- printf("FAILED\n");
- return false;
- }
- fclose(file);
- cur = cur->next;
- }
- return true;
-}
-
-bool PAKFile::outputFileAs(const char *f, const char *fn) {
- FileList *cur = (_fileList != 0) ? _fileList->findEntry(f) : 0;
-
- if (!cur) {
- error("file '%s' not found", f);
- return false;
- }
-
- FILE *file = fopen(fn, "wb");
- if (!file) {
- error("couldn't open file '%s' in write mode", fn);
- return false;
- }
- printf("Exracting file '%s' to file '%s'...", cur->filename, fn);
- if (fwrite(cur->data, 1, cur->size, file) == cur->size) {
- printf("OK\n");
- } else {
- printf("FAILED\n");
- return false;
- }
- fclose(file);
- return true;
-}
-
-const uint8 *PAKFile::getFileData(const char *file, uint32 *size) {
- FileList *cur = (_fileList != 0) ? _fileList->findEntry(file) : 0;
-
- if (!cur)
- return 0;
-
- if (size)
- *size = cur->size;
- return cur->data;
-}
-
-bool PAKFile::addFile(const char *name, const char *file) {
- if (_fileList && _fileList->findEntry(name)) {
- error("entry '%s' already exists", name);
- return false;
- }
-
- FILE *f = fopen(file, "rb");
- if (!f) {
- error("couldn't open file '%s'", file);
- return false;
- }
-
- uint32 filesize = fileSize(f);
- uint8 *data = new uint8[filesize];
- assert(data);
- if (fread(data, 1, filesize, f) != filesize) {
- error("couldn't read from file '%s'", file);
- return false;
- }
- fclose(f);
- return addFile(name, data, filesize);
-}
-
-bool PAKFile::addFile(const char *name, uint8 *data, uint32 size) {
- if (_fileList && _fileList->findEntry(name)) {
- error("entry '%s' already exists", name);
- return false;
- }
-
- FileList *newEntry = new FileList;
- assert(newEntry);
- newEntry->filename = new char[strlen(name)+1];
- assert(newEntry->filename);
- strncpy(newEntry->filename, name, strlen(name)+1);
- newEntry->size = size;
- newEntry->data = data;
-
- if (_fileList) {
- _fileList->addEntry(newEntry);
- } else {
- _fileList = newEntry;
- }
- return true;
-}
-
-bool PAKFile::removeFile(const char *name) {
- for (FileList *cur = _fileList, *last = 0; cur; last = cur, cur = cur->next) {
- if (scumm_stricmp(cur->filename, name) == 0) {
- FileList *next = cur->next;
- cur->next = 0;
- delete cur;
- if (last)
- last->next = next;
- else
- _fileList = next;
- return true;
- }
- }
- return false;
-}