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
|