aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/ds/arm9/source/zipreader.h
blob: cd7244dba5bef86786f6ea2fc1f55db4751bf3f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/* 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 */

#ifndef _ZIPREADER_H_
#define _ZIPREADER_H_
#include "portdefs.h"
#define ZF_SEARCH_START 0x08000000
#define ZF_SEARCH_END 0x09000000
#define ZF_SEARCH_STRIDE 16

class ZipFile {

	struct FileHeader {
		char magic[4];		// Header (0x04034B50)			0
		u16 minVersion;		// Version needed to extract	4
		u16 flags;			// Flags						6
		u16 comp;			// Compression method			8
		u16 modTime;		// Last modified file time		A
		u16 modDate;		// Last modified file data		C
		u32 crc32;			// CRC32						F
		u32 compSize;		// Compressed size
		u32 fileSize;		// Uncompressed file size
		u16 nameLength;		// Length of the filename
		u16 extraLength;	// Length of any extra data
	} __attribute__ ((packed));

	char* _zipFile;
	char _directory[128];

	bool _allFilesVisible;

	FileHeader* _currentFile;

public:
	ZipFile();
	~ZipFile();

	bool isReady();

	// These operations set the current file
	bool restartFile();
	bool skipFile();
	bool findFile(char* search);

	// These return the file's data and information
	char* getFile();
	int getFileSize();
	void getFileName(char* name);
	bool isDirectory();

	// These set the current directory
	void changeDirectory(char* name);
	void changeToRoot();
	void setAllFilesVisible(bool state) { _allFilesVisible = state; }

	bool currentFileInFolder();

	u16 misaligned16(u16* v);
	u32 misaligned32(u32* v);

};


#endif