Mercurial > otakunoraifu
diff 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 |
line wrap: on
line diff
--- a/system/file.h +++ b/system/file.h @@ -34,10 +34,10 @@ // read 'KANON' compressed file -#include<stdio.h> -#include<stdlib.h> -#include<string.h> -#include<sys/types.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> #ifdef HAVE_CONFIG_H # include "config.h" @@ -107,128 +107,128 @@ class ARCINFO; class ARCFILE_ATOM; class KEYHOLDER { -public: - void SetKey(char[16]); - void SetKey2(char[33]); - void GuessKey(char*); - const char* GetKey(void); -private: - char key[16]; + public: + void SetKey(char[16]); + void SetKey2(char[33]); + void GuessKey(char*); + const char* GetKey(void); + private: + char key[16]; }; class FILESEARCH { -public: + public: #define TYPEMAX 14 - enum FILETYPE { - /* 一応、0 - 15 まで reserved */ - ALL = 1, /* dat/ 以下のファイル(デフォルトの検索先) */ - ROOT= 2, /* ゲームのインストールディレクトリ */ - PDT = 3, /* default: PDT/ */ - SCN = 4, /* default: DAT/SEEN.TXT */ - ANM = 5, /* default: DAT/ALLANM.ANL */ - ARD = 6, /* default: DAT/ALLARD.ARD */ - CUR = 7, /* default: DAT/ALLCUR.CUR */ - MID = 8, /* default: ALL */ - WAV = 9, /* default: ALL */ - KOE = 10, /* default: KOE/ */ - BGM = 11, /* default: BGM */ - MOV = 12, /* default : MOV */ - GAN = 13 /* default : MOV */ - }; - enum ARCTYPE {ATYPE_DIR, ATYPE_ARC, ATYPE_SCN2k}; -private: - /* InitRoot() の時点で初期化される変数 */ - DIRFILE* root_dir; - DIRFILE* dat_dir; - ARCFILE* searcher[TYPEMAX]; - /* ファイルの存在位置の information */ - ARCTYPE is_archived[TYPEMAX]; - const char* filenames[TYPEMAX]; - /* デフォルトの information */ - static ARCTYPE default_is_archived[TYPEMAX]; - static const char* default_dirnames[TYPEMAX]; -public: - FILESEARCH(void); - ~FILESEARCH(); - /* 初めにゲームのデータがあるディレクトリを設定する必要がある */ - int InitRoot(char* root); - /* ファイルの型ごとの情報をセットする */ - void SetFileInformation(FILETYPE type, ARCTYPE is_arc, - char* filename); - /* 複数のファイルを一つの型に関連づける */ - void AppendFileInformation(FILETYPE type, ARCTYPE is_arc, - char* filename); - ARCFILE* MakeARCFILE(ARCTYPE tp, const char* filename); - /* fname で指定された名前のファイルを検索 */ - class ARCINFO* Find(FILETYPE type, const char* fname, const char* ext=0); - /* ある種類のファイルをすべてリストアップ - ** 末尾は NULL pointer - */ - char** ListAll(FILETYPE type); + enum FILETYPE { + /* 一応、0 - 15 まで reserved */ + ALL = 1, /* dat/ 以下のファイル(デフォルトの検索先) */ + ROOT= 2, /* ゲームのインストールディレクトリ */ + PDT = 3, /* default: PDT/ */ + SCN = 4, /* default: DAT/SEEN.TXT */ + ANM = 5, /* default: DAT/ALLANM.ANL */ + ARD = 6, /* default: DAT/ALLARD.ARD */ + CUR = 7, /* default: DAT/ALLCUR.CUR */ + MID = 8, /* default: ALL */ + WAV = 9, /* default: ALL */ + KOE = 10, /* default: KOE/ */ + BGM = 11, /* default: BGM */ + MOV = 12, /* default : MOV */ + GAN = 13 /* default : MOV */ + }; + enum ARCTYPE {ATYPE_DIR, ATYPE_ARC, ATYPE_SCN2k}; + private: + /* InitRoot() の時点で初期化される変数 */ + DIRFILE* root_dir; + DIRFILE* dat_dir; + ARCFILE* searcher[TYPEMAX]; + /* ファイルの存在位置の information */ + ARCTYPE is_archived[TYPEMAX]; + const char* filenames[TYPEMAX]; + /* デフォルトの information */ + static ARCTYPE default_is_archived[TYPEMAX]; + static const char* default_dirnames[TYPEMAX]; + public: + FILESEARCH(void); + ~FILESEARCH(); + /* 初めにゲームのデータがあるディレクトリを設定する必要がある */ + int InitRoot(char* root); + /* ファイルの型ごとの情報をセットする */ + void SetFileInformation(FILETYPE type, ARCTYPE is_arc, + char* filename); + /* 複数のファイルを一つの型に関連づける */ + void AppendFileInformation(FILETYPE type, ARCTYPE is_arc, + char* filename); + ARCFILE* MakeARCFILE(ARCTYPE tp, const char* filename); + /* fname で指定された名前のファイルを検索 */ + class ARCINFO* Find(FILETYPE type, const char* fname, const char* ext=0); + /* ある種類のファイルをすべてリストアップ + ** 末尾は NULL pointer + */ + char** ListAll(FILETYPE type); }; class ARCINFO { -protected: - /* ファイルそのものの情報 */ - ARCFILE_ATOM& info; - char* arcfile; - /* mmap している場合、その情報 */ - bool use_mmap; - char* mmapped_memory; - int fd; - /* ファイル内容の入っているバッファ */ - const char* data; + protected: + /* ファイルそのものの情報 */ + ARCFILE_ATOM& info; + char* arcfile; + /* mmap している場合、その情報 */ + bool use_mmap; + char* mmapped_memory; + int fd; + /* ファイル内容の入っているバッファ */ + const char* data; -protected: - ARCINFO(const char* arcfile, ARCFILE_ATOM& from); // only from ARCFILE - friend class ARCFILE; - friend class DIRFILE; + protected: + ARCINFO(const char* arcfile, ARCFILE_ATOM& from); // only from ARCFILE + friend class ARCFILE; + friend class DIRFILE; - virtual bool ExecExtract(void); -public: - /* dest は256byte 程度の余裕があること */ - static void Extract(char*& dest, char*& src, char* destend, char* srcend); - static void Extract2k(char*& dest, char*& src, char* destend, char* srcend); - virtual ~ARCINFO(); - /* 必要なら Read 前に呼ぶことで処理を分割できる */ - int Size(void) const; - char* CopyRead(void); /* Read() して内容のコピーを返す */ - const char* Read(void); - /* ファイルが regular file の場合、ファイル名を帰す */ - /* そうでないなら 0 を帰す */ - const char* Path(void) const; - FILE* OpenFile(int* length=0) const; /* 互換性のため:raw file の場合、ファイルを開く */ + virtual bool ExecExtract(void); + public: + /* dest は256byte 程度の余裕があること */ + static void Extract(char*& dest, char*& src, char* destend, char* srcend); + static void Extract2k(char*& dest, char*& src, char* destend, char* srcend); + virtual ~ARCINFO(); + /* 必要なら Read 前に呼ぶことで処理を分割できる */ + int Size(void) const; + char* CopyRead(void); /* Read() して内容のコピーを返す */ + const char* Read(void); + /* ファイルが regular file の場合、ファイル名を帰す */ + /* そうでないなら 0 を帰す */ + const char* Path(void) const; + FILE* OpenFile(int* length=0) const; /* 互換性のため:raw file の場合、ファイルを開く */ }; class GRPCONV { -public: - int width; - int height; - bool is_mask; + public: + int width; + int height; + bool is_mask; - const char* filename; - const char* data; - int datalen; + const char* filename; + const char* data; + int datalen; - int Width(void) { return width;} - int Height(void) { return height;} - bool IsMask(void) { return is_mask;} + int Width(void) { return width;} + int Height(void) { return height;} + bool IsMask(void) { return is_mask;} - GRPCONV(void); - virtual ~GRPCONV(); - void Init(const char* fname, const char* data, int dlen, int width, int height, bool is_mask); + GRPCONV(void); + virtual ~GRPCONV(); + void Init(const char* fname, const char* data, int dlen, int width, int height, bool is_mask); - virtual bool Read(char* image) = 0; - static GRPCONV* AssignConverter(const char* inbuf, int inlen, const char* fname); - static GRPCONV* AssignConverter(ARCINFO* info) { - const char* dat = info->Read(); - if (dat == 0) return 0; - return AssignConverter(dat, info->Size(), "???"); - } - void CopyRGBA(char* image, const char* from); - void CopyRGB(char* image, const char* from); - void CopyRGBA_rev(char* image, const char* from); - void CopyRGB_rev(char* image, const char* from); + virtual bool Read(char* image) = 0; + static GRPCONV* AssignConverter(const char* inbuf, int inlen, const char* fname); + static GRPCONV* AssignConverter(ARCINFO* info) { + const char* dat = info->Read(); + if (dat == 0) return 0; + return AssignConverter(dat, info->Size(), info->Path()); //FIXME: Is it really okay? + } + void CopyRGBA(char* image, const char* from); + void CopyRGB(char* image, const char* from); + void CopyRGBA_rev(char* image, const char* from); + void CopyRGB_rev(char* image, const char* from); }; extern FILESEARCH file_searcher;