comparison system/file.h @ 52:15a18fbe6f21

* Known bugs added to the README * Code cleaning (0 -> NULL when needed, indentation, spaces, ...)
author thib
date Sat, 18 Apr 2009 18:35:39 +0000
parents 5f548e5957a8
children ddbcbd000206
comparison
equal deleted inserted replaced
51:cbb301016a4e 52:15a18fbe6f21
32 #define DIR_SPLIT '/' /* UNIX */ 32 #define DIR_SPLIT '/' /* UNIX */
33 #endif 33 #endif
34 34
35 // read 'KANON' compressed file 35 // read 'KANON' compressed file
36 36
37 #include<stdio.h> 37 #include <stdio.h>
38 #include<stdlib.h> 38 #include <stdlib.h>
39 #include<string.h> 39 #include <string.h>
40 #include<sys/types.h> 40 #include <sys/types.h>
41 41
42 #ifdef HAVE_CONFIG_H 42 #ifdef HAVE_CONFIG_H
43 # include "config.h" 43 # include "config.h"
44 #endif 44 #endif
45 45
105 /* ARCINFO はファイルを読み込むために必要 */ 105 /* ARCINFO はファイルを読み込むために必要 */
106 class ARCINFO; 106 class ARCINFO;
107 class ARCFILE_ATOM; 107 class ARCFILE_ATOM;
108 108
109 class KEYHOLDER { 109 class KEYHOLDER {
110 public: 110 public:
111 void SetKey(char[16]); 111 void SetKey(char[16]);
112 void SetKey2(char[33]); 112 void SetKey2(char[33]);
113 void GuessKey(char*); 113 void GuessKey(char*);
114 const char* GetKey(void); 114 const char* GetKey(void);
115 private: 115 private:
116 char key[16]; 116 char key[16];
117 }; 117 };
118 118
119 class FILESEARCH { 119 class FILESEARCH {
120 public: 120 public:
121 #define TYPEMAX 14 121 #define TYPEMAX 14
122 enum FILETYPE { 122 enum FILETYPE {
123 /* 一応、0 - 15 まで reserved */ 123 /* 一応、0 - 15 まで reserved */
124 ALL = 1, /* dat/ 以下のファイル(デフォルトの検索先) */ 124 ALL = 1, /* dat/ 以下のファイル(デフォルトの検索先) */
125 ROOT= 2, /* ゲームのインストールディレクトリ */ 125 ROOT= 2, /* ゲームのインストールディレクトリ */
126 PDT = 3, /* default: PDT/ */ 126 PDT = 3, /* default: PDT/ */
127 SCN = 4, /* default: DAT/SEEN.TXT */ 127 SCN = 4, /* default: DAT/SEEN.TXT */
128 ANM = 5, /* default: DAT/ALLANM.ANL */ 128 ANM = 5, /* default: DAT/ALLANM.ANL */
129 ARD = 6, /* default: DAT/ALLARD.ARD */ 129 ARD = 6, /* default: DAT/ALLARD.ARD */
130 CUR = 7, /* default: DAT/ALLCUR.CUR */ 130 CUR = 7, /* default: DAT/ALLCUR.CUR */
131 MID = 8, /* default: ALL */ 131 MID = 8, /* default: ALL */
132 WAV = 9, /* default: ALL */ 132 WAV = 9, /* default: ALL */
133 KOE = 10, /* default: KOE/ */ 133 KOE = 10, /* default: KOE/ */
134 BGM = 11, /* default: BGM */ 134 BGM = 11, /* default: BGM */
135 MOV = 12, /* default : MOV */ 135 MOV = 12, /* default : MOV */
136 GAN = 13 /* default : MOV */ 136 GAN = 13 /* default : MOV */
137 }; 137 };
138 enum ARCTYPE {ATYPE_DIR, ATYPE_ARC, ATYPE_SCN2k}; 138 enum ARCTYPE {ATYPE_DIR, ATYPE_ARC, ATYPE_SCN2k};
139 private: 139 private:
140 /* InitRoot() の時点で初期化される変数 */ 140 /* InitRoot() の時点で初期化される変数 */
141 DIRFILE* root_dir; 141 DIRFILE* root_dir;
142 DIRFILE* dat_dir; 142 DIRFILE* dat_dir;
143 ARCFILE* searcher[TYPEMAX]; 143 ARCFILE* searcher[TYPEMAX];
144 /* ファイルの存在位置の information */ 144 /* ファイルの存在位置の information */
145 ARCTYPE is_archived[TYPEMAX]; 145 ARCTYPE is_archived[TYPEMAX];
146 const char* filenames[TYPEMAX]; 146 const char* filenames[TYPEMAX];
147 /* デフォルトの information */ 147 /* デフォルトの information */
148 static ARCTYPE default_is_archived[TYPEMAX]; 148 static ARCTYPE default_is_archived[TYPEMAX];
149 static const char* default_dirnames[TYPEMAX]; 149 static const char* default_dirnames[TYPEMAX];
150 public: 150 public:
151 FILESEARCH(void); 151 FILESEARCH(void);
152 ~FILESEARCH(); 152 ~FILESEARCH();
153 /* 初めにゲームのデータがあるディレクトリを設定する必要がある */ 153 /* 初めにゲームのデータがあるディレクトリを設定する必要がある */
154 int InitRoot(char* root); 154 int InitRoot(char* root);
155 /* ファイルの型ごとの情報をセットする */ 155 /* ファイルの型ごとの情報をセットする */
156 void SetFileInformation(FILETYPE type, ARCTYPE is_arc, 156 void SetFileInformation(FILETYPE type, ARCTYPE is_arc,
157 char* filename); 157 char* filename);
158 /* 複数のファイルを一つの型に関連づける */ 158 /* 複数のファイルを一つの型に関連づける */
159 void AppendFileInformation(FILETYPE type, ARCTYPE is_arc, 159 void AppendFileInformation(FILETYPE type, ARCTYPE is_arc,
160 char* filename); 160 char* filename);
161 ARCFILE* MakeARCFILE(ARCTYPE tp, const char* filename); 161 ARCFILE* MakeARCFILE(ARCTYPE tp, const char* filename);
162 /* fname で指定された名前のファイルを検索 */ 162 /* fname で指定された名前のファイルを検索 */
163 class ARCINFO* Find(FILETYPE type, const char* fname, const char* ext=0); 163 class ARCINFO* Find(FILETYPE type, const char* fname, const char* ext=0);
164 /* ある種類のファイルをすべてリストアップ 164 /* ある種類のファイルをすべてリストアップ
165 ** 末尾は NULL pointer 165 ** 末尾は NULL pointer
166 */ 166 */
167 char** ListAll(FILETYPE type); 167 char** ListAll(FILETYPE type);
168 }; 168 };
169 169
170 class ARCINFO { 170 class ARCINFO {
171 protected: 171 protected:
172 /* ファイルそのものの情報 */ 172 /* ファイルそのものの情報 */
173 ARCFILE_ATOM& info; 173 ARCFILE_ATOM& info;
174 char* arcfile; 174 char* arcfile;
175 /* mmap している場合、その情報 */ 175 /* mmap している場合、その情報 */
176 bool use_mmap; 176 bool use_mmap;
177 char* mmapped_memory; 177 char* mmapped_memory;
178 int fd; 178 int fd;
179 /* ファイル内容の入っているバッファ */ 179 /* ファイル内容の入っているバッファ */
180 const char* data; 180 const char* data;
181 181
182 protected: 182 protected:
183 ARCINFO(const char* arcfile, ARCFILE_ATOM& from); // only from ARCFILE 183 ARCINFO(const char* arcfile, ARCFILE_ATOM& from); // only from ARCFILE
184 friend class ARCFILE; 184 friend class ARCFILE;
185 friend class DIRFILE; 185 friend class DIRFILE;
186 186
187 virtual bool ExecExtract(void); 187 virtual bool ExecExtract(void);
188 public: 188 public:
189 /* dest は256byte 程度の余裕があること */ 189 /* dest は256byte 程度の余裕があること */
190 static void Extract(char*& dest, char*& src, char* destend, char* srcend); 190 static void Extract(char*& dest, char*& src, char* destend, char* srcend);
191 static void Extract2k(char*& dest, char*& src, char* destend, char* srcend); 191 static void Extract2k(char*& dest, char*& src, char* destend, char* srcend);
192 virtual ~ARCINFO(); 192 virtual ~ARCINFO();
193 /* 必要なら Read 前に呼ぶことで処理を分割できる */ 193 /* 必要なら Read 前に呼ぶことで処理を分割できる */
194 int Size(void) const; 194 int Size(void) const;
195 char* CopyRead(void); /* Read() して内容のコピーを返す */ 195 char* CopyRead(void); /* Read() して内容のコピーを返す */
196 const char* Read(void); 196 const char* Read(void);
197 /* ファイルが regular file の場合、ファイル名を帰す */ 197 /* ファイルが regular file の場合、ファイル名を帰す */
198 /* そうでないなら 0 を帰す */ 198 /* そうでないなら 0 を帰す */
199 const char* Path(void) const; 199 const char* Path(void) const;
200 FILE* OpenFile(int* length=0) const; /* 互換性のため:raw file の場合、ファイルを開く */ 200 FILE* OpenFile(int* length=0) const; /* 互換性のため:raw file の場合、ファイルを開く */
201 }; 201 };
202 202
203 class GRPCONV { 203 class GRPCONV {
204 public: 204 public:
205 int width; 205 int width;
206 int height; 206 int height;
207 bool is_mask; 207 bool is_mask;
208 208
209 const char* filename; 209 const char* filename;
210 const char* data; 210 const char* data;
211 int datalen; 211 int datalen;
212 212
213 int Width(void) { return width;} 213 int Width(void) { return width;}
214 int Height(void) { return height;} 214 int Height(void) { return height;}
215 bool IsMask(void) { return is_mask;} 215 bool IsMask(void) { return is_mask;}
216 216
217 GRPCONV(void); 217 GRPCONV(void);
218 virtual ~GRPCONV(); 218 virtual ~GRPCONV();
219 void Init(const char* fname, const char* data, int dlen, int width, int height, bool is_mask); 219 void Init(const char* fname, const char* data, int dlen, int width, int height, bool is_mask);
220 220
221 virtual bool Read(char* image) = 0; 221 virtual bool Read(char* image) = 0;
222 static GRPCONV* AssignConverter(const char* inbuf, int inlen, const char* fname); 222 static GRPCONV* AssignConverter(const char* inbuf, int inlen, const char* fname);
223 static GRPCONV* AssignConverter(ARCINFO* info) { 223 static GRPCONV* AssignConverter(ARCINFO* info) {
224 const char* dat = info->Read(); 224 const char* dat = info->Read();
225 if (dat == 0) return 0; 225 if (dat == 0) return 0;
226 return AssignConverter(dat, info->Size(), "???"); 226 return AssignConverter(dat, info->Size(), info->Path()); //FIXME: Is it really okay?
227 } 227 }
228 void CopyRGBA(char* image, const char* from); 228 void CopyRGBA(char* image, const char* from);
229 void CopyRGB(char* image, const char* from); 229 void CopyRGB(char* image, const char* from);
230 void CopyRGBA_rev(char* image, const char* from); 230 void CopyRGBA_rev(char* image, const char* from);
231 void CopyRGB_rev(char* image, const char* from); 231 void CopyRGB_rev(char* image, const char* from);
232 }; 232 };
233 233
234 extern FILESEARCH file_searcher; 234 extern FILESEARCH file_searcher;
235 extern KEYHOLDER key_holder; 235 extern KEYHOLDER key_holder;
236 236