Mercurial > otakunoraifu
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 |