author | richk |
Wed, 16 Apr 2008 00:07:47 +0000 | |
branch | NewGRF_ports |
changeset 10200 | aba3af04cdbd |
parent 6872 | 1c4a4a609f85 |
child 10724 | 68a692eacf22 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
6527
f584ab6d87f8
(svn r8987) -Cleanup: doxygen changes. Again. Mostly (still) @files missing tags and (more than just) a few comments style.
belugas
parents:
6505
diff
changeset
|
3 |
/** @file fileio.h Declarations for Standard In/Out file operations */ |
6505
abcb0580d976
(svn r8950) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
5726
diff
changeset
|
4 |
|
0 | 5 |
#ifndef FILEIO_H |
6 |
#define FILEIO_H |
|
7 |
||
6870
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
8 |
#include <map> |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
9 |
#include <string> |
6872
1c4a4a609f85
(svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
6870
diff
changeset
|
10 |
#include "core/enum_type.hpp" |
6720
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
11 |
|
0 | 12 |
void FioSeekTo(uint32 pos, int mode); |
6870
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
13 |
void FioSeekToFile(uint8 slot, uint32 pos); |
6573 | 14 |
uint32 FioGetPos(); |
6872
1c4a4a609f85
(svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
6870
diff
changeset
|
15 |
const char *FioGetFilename(uint8 slot); |
6573 | 16 |
byte FioReadByte(); |
17 |
uint16 FioReadWord(); |
|
18 |
uint32 FioReadDword(); |
|
19 |
void FioCloseAll(); |
|
0 | 20 |
void FioOpenFile(int slot, const char *filename); |
21 |
void FioReadBlock(void *ptr, uint size); |
|
22 |
void FioSkipBytes(int n); |
|
6624
554e5aee6c3f
(svn r9129) -Codechange: unify parts of DeterminePaths.
rubidium
parents:
6573
diff
changeset
|
23 |
void FioCreateDirectory(const char *filename); |
554e5aee6c3f
(svn r9129) -Codechange: unify parts of DeterminePaths.
rubidium
parents:
6573
diff
changeset
|
24 |
|
6720
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
25 |
/** |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
26 |
* The different kinds of subdirectories OpenTTD uses |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
27 |
*/ |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
28 |
enum Subdirectory { |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
29 |
BASE_DIR, ///< Base directory for all subdirectories |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
30 |
SAVE_DIR, ///< Base directory for all savegames |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
31 |
AUTOSAVE_DIR, ///< Subdirectory of save for autosaves |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
32 |
SCENARIO_DIR, ///< Base directory for all scenarios |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
33 |
HEIGHTMAP_DIR, ///< Subdirectory of scenario for heightmaps |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
34 |
GM_DIR, ///< Subdirectory for all music |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
35 |
DATA_DIR, ///< Subdirectory for all data (GRFs, sample.cat, intro game) |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
36 |
LANG_DIR, ///< Subdirectory for all translation files |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
37 |
NUM_SUBDIRS, ///< Number of subdirectories |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
38 |
NO_DIRECTORY, ///< A path without any base directory |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
39 |
}; |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
40 |
|
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
41 |
/** |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
42 |
* Types of searchpaths OpenTTD might use |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
43 |
*/ |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
44 |
enum Searchpath { |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
45 |
SP_FIRST_DIR, |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
46 |
SP_WORKING_DIR = SP_FIRST_DIR, ///< Search in the working directory |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
47 |
SP_PERSONAL_DIR, ///< Search in the personal directory |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
48 |
SP_SHARED_DIR, ///< Search in the shared directory, like 'Shared Files' under Windows |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
49 |
SP_BINARY_DIR, ///< Search in the directory where the binary resides |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
50 |
SP_INSTALLATION_DIR, ///< Search in the installation directory |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
51 |
SP_APPLICATION_BUNDLE_DIR, ///< Search within the application bundle |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
52 |
NUM_SEARCHPATHS |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
53 |
}; |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
54 |
|
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
55 |
DECLARE_POSTFIX_INCREMENT(Searchpath); |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
56 |
|
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
57 |
/** |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
58 |
* The searchpaths OpenTTD could search through. |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
59 |
* At least one of the slots has to be filled with a path. |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
60 |
* NULL paths tell that there is no such path for the |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
61 |
* current operating system. |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
62 |
*/ |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
63 |
extern const char *_searchpaths[NUM_SEARCHPATHS]; |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
64 |
|
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
65 |
/** |
6870
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
66 |
* The define of a TarList. |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
67 |
*/ |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
68 |
struct TarListEntry { |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
69 |
const char *filename; |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
70 |
}; |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
71 |
struct TarFileListEntry { |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
72 |
TarListEntry *tar; |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
73 |
int size; |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
74 |
int position; |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
75 |
}; |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
76 |
typedef std::map<std::string, TarListEntry *> TarList; |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
77 |
typedef std::map<std::string, TarFileListEntry> TarFileList; |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
78 |
extern TarList _tar_list; |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
79 |
extern TarFileList _tar_filelist; |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
80 |
|
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
81 |
/** |
6720
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
82 |
* Checks whether the given search path is a valid search path |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
83 |
* @param sp the search path to check |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
84 |
* @return true if the search path is valid |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
85 |
*/ |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
86 |
static inline bool IsValidSearchPath(Searchpath sp) |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
87 |
{ |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
88 |
return sp < NUM_SEARCHPATHS && _searchpaths[sp] != NULL; |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
89 |
} |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
90 |
|
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
91 |
/** Iterator for all the search paths */ |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
92 |
#define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp)) |
6870
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
93 |
#define FOR_ALL_TARS(tar) for (tar = _tar_filelist.begin(); tar != _tar_filelist.end(); tar++) |
6720
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
94 |
|
6870
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
95 |
typedef bool FioTarFileListCallback(const char *filename, int size, void *userdata); |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
96 |
FILE *FioTarFileList(const char *tar, const char *mode, size_t *filesize, FioTarFileListCallback *callback, void *userdata); |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
97 |
|
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
98 |
void FioFCloseFile(FILE *f); |
ca3fd1fbe311
(svn r11219) [NewGRF_ports] -Sync: with trunk r11035:11218.
rubidium
parents:
6720
diff
changeset
|
99 |
FILE *FioFOpenFile(const char *filename, const char *mode = "rb", Subdirectory subdir = DATA_DIR, size_t *filesize = NULL); |
6720
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
100 |
bool FioCheckFileExists(const char *filename, Subdirectory subdir = DATA_DIR); |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
101 |
char *FioGetFullPath(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir, const char *filename); |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
102 |
char *FioFindFullPath(char *buf, size_t buflen, Subdirectory subdir, const char *filename); |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
103 |
char *FioAppendDirectory(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir); |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
104 |
char *FioGetDirectory(char *buf, size_t buflen, Subdirectory subdir); |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
105 |
|
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
106 |
static inline const char *FioGetSubdirectory(Subdirectory subdir) |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
107 |
{ |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
108 |
extern const char *_subdirs[NUM_SUBDIRS]; |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
109 |
assert(subdir < NUM_SUBDIRS); |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
110 |
return _subdirs[subdir]; |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
111 |
} |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
112 |
|
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
113 |
void SanitizeFilename(char *filename); |
6624
554e5aee6c3f
(svn r9129) -Codechange: unify parts of DeterminePaths.
rubidium
parents:
6573
diff
changeset
|
114 |
void AppendPathSeparator(char *buf, size_t buflen); |
6643
7fad81bde617
(svn r9266) -Codechange: unify the retrieval of the base paths a little more.
rubidium
parents:
6624
diff
changeset
|
115 |
void DeterminePaths(const char *exe); |
6872
1c4a4a609f85
(svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
6870
diff
changeset
|
116 |
void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize); |
1c4a4a609f85
(svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
6870
diff
changeset
|
117 |
bool FileExists(const char *filename); |
0 | 118 |
|
6720
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
119 |
extern char *_personal_dir; ///< custom directory for personal settings, saves, newgrf, etc. |
35756db7e577
(svn r10560) [NewGRF_ports] -Sync: with trunk r10027-10559
richk
parents:
6643
diff
changeset
|
120 |
|
0 | 121 |
#endif /* FILEIO_H */ |