author | rubidium |
Sun, 13 Jan 2008 00:28:01 +0000 | |
changeset 8759 | eae56497cf83 |
parent 8627 | 448ebf3a8291 |
child 8870 | 461ed7760525 |
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 |
||
8088
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
8 |
#include <map> |
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
9 |
#include <string> |
8759
eae56497cf83
(svn r11827) -Codechange: do not include enum_type.hpp unnecessary.
rubidium
parents:
8627
diff
changeset
|
10 |
#include "core/enum_type.hpp" |
7425
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
11 |
|
0 | 12 |
void FioSeekTo(uint32 pos, int mode); |
8066
7acd480e05c9
(svn r11095) -Codechange: don't abuse 'file_pos' by storing the file_slot in it too, but use a nice seperate variable for it
truelight
parents:
7440
diff
changeset
|
13 |
void FioSeekToFile(uint8 slot, uint32 pos); |
6573 | 14 |
uint32 FioGetPos(); |
7392
a716551b0c7f
(svn r10143) -Add: store the filename of the grfs opened and allow easy access to the name
truelight
parents:
7371
diff
changeset
|
15 |
const char *FioGetFilename(); |
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); |
|
7425
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
23 |
void FioCreateDirectory(const char *filename); |
6624
554e5aee6c3f
(svn r9129) -Codechange: unify parts of DeterminePaths.
rubidium
parents:
6573
diff
changeset
|
24 |
|
7425
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
25 |
/** |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
26 |
* The different kinds of subdirectories OpenTTD uses |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
27 |
*/ |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
28 |
enum Subdirectory { |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
29 |
BASE_DIR, ///< Base directory for all subdirectories |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
30 |
SAVE_DIR, ///< Base directory for all savegames |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
31 |
AUTOSAVE_DIR, ///< Subdirectory of save for autosaves |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
32 |
SCENARIO_DIR, ///< Base directory for all scenarios |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
33 |
HEIGHTMAP_DIR, ///< Subdirectory of scenario for heightmaps |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
34 |
GM_DIR, ///< Subdirectory for all music |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
35 |
DATA_DIR, ///< Subdirectory for all data (GRFs, sample.cat, intro game) |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
36 |
LANG_DIR, ///< Subdirectory for all translation files |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
37 |
NUM_SUBDIRS, ///< Number of subdirectories |
7431
f340111a55ec
(svn r10188) -Codechange: make it a little easier to load a savegame from the console:
rubidium
parents:
7425
diff
changeset
|
38 |
NO_DIRECTORY, ///< A path without any base directory |
7425
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
39 |
}; |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
40 |
|
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
41 |
/** |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
42 |
* Types of searchpaths OpenTTD might use |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
43 |
*/ |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
44 |
enum Searchpath { |
7440
abd68dd9c015
(svn r10198) -Fix (r10194): did not search all search paths.
rubidium
parents:
7437
diff
changeset
|
45 |
SP_FIRST_DIR, |
abd68dd9c015
(svn r10198) -Fix (r10194): did not search all search paths.
rubidium
parents:
7437
diff
changeset
|
46 |
SP_WORKING_DIR = SP_FIRST_DIR, ///< Search in the working directory |
abd68dd9c015
(svn r10198) -Fix (r10194): did not search all search paths.
rubidium
parents:
7437
diff
changeset
|
47 |
SP_PERSONAL_DIR, ///< Search in the personal directory |
abd68dd9c015
(svn r10198) -Fix (r10194): did not search all search paths.
rubidium
parents:
7437
diff
changeset
|
48 |
SP_SHARED_DIR, ///< Search in the shared directory, like 'Shared Files' under Windows |
abd68dd9c015
(svn r10198) -Fix (r10194): did not search all search paths.
rubidium
parents:
7437
diff
changeset
|
49 |
SP_BINARY_DIR, ///< Search in the directory where the binary resides |
abd68dd9c015
(svn r10198) -Fix (r10194): did not search all search paths.
rubidium
parents:
7437
diff
changeset
|
50 |
SP_INSTALLATION_DIR, ///< Search in the installation directory |
abd68dd9c015
(svn r10198) -Fix (r10194): did not search all search paths.
rubidium
parents:
7437
diff
changeset
|
51 |
SP_APPLICATION_BUNDLE_DIR, ///< Search within the application bundle |
7425
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
52 |
NUM_SEARCHPATHS |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
53 |
}; |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
54 |
|
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
55 |
DECLARE_POSTFIX_INCREMENT(Searchpath); |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
56 |
|
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
57 |
/** |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
58 |
* The searchpaths OpenTTD could search through. |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
59 |
* At least one of the slots has to be filled with a path. |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
60 |
* NULL paths tell that there is no such path for the |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
61 |
* current operating system. |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
62 |
*/ |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
63 |
extern const char *_searchpaths[NUM_SEARCHPATHS]; |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
64 |
|
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
65 |
/** |
8088
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
66 |
* The define of a TarList. |
8077
92edb3688fdf
(svn r11106) -Add: added .tar support; you can pack all files in your data/ dir in how ever many .tar files you like, keeping the dir-structure equal to the unpacked version, and OpenTTD can handle them just like the files were unpacked
truelight
parents:
8070
diff
changeset
|
67 |
*/ |
8088
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
68 |
struct TarListEntry { |
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
69 |
const char *filename; |
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
70 |
}; |
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
71 |
struct TarFileListEntry { |
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
72 |
TarListEntry *tar; |
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
73 |
int size; |
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
74 |
int position; |
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
75 |
}; |
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
76 |
typedef std::map<std::string, TarListEntry *> TarList; |
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
77 |
typedef std::map<std::string, TarFileListEntry> TarFileList; |
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
78 |
extern TarList _tar_list; |
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
79 |
extern TarFileList _tar_filelist; |
8077
92edb3688fdf
(svn r11106) -Add: added .tar support; you can pack all files in your data/ dir in how ever many .tar files you like, keeping the dir-structure equal to the unpacked version, and OpenTTD can handle them just like the files were unpacked
truelight
parents:
8070
diff
changeset
|
80 |
|
92edb3688fdf
(svn r11106) -Add: added .tar support; you can pack all files in your data/ dir in how ever many .tar files you like, keeping the dir-structure equal to the unpacked version, and OpenTTD can handle them just like the files were unpacked
truelight
parents:
8070
diff
changeset
|
81 |
/** |
7425
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
82 |
* Checks whether the given search path is a valid search path |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
83 |
* @param sp the search path to check |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
84 |
* @return true if the search path is valid |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
85 |
*/ |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
86 |
static inline bool IsValidSearchPath(Searchpath sp) |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
87 |
{ |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
88 |
return sp < NUM_SEARCHPATHS && _searchpaths[sp] != NULL; |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
89 |
} |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
90 |
|
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
91 |
/** Iterator for all the search paths */ |
7440
abd68dd9c015
(svn r10198) -Fix (r10194): did not search all search paths.
rubidium
parents:
7437
diff
changeset
|
92 |
#define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp)) |
8088
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
93 |
#define FOR_ALL_TARS(tar) for (tar = _tar_filelist.begin(); tar != _tar_filelist.end(); tar++) |
8077
92edb3688fdf
(svn r11106) -Add: added .tar support; you can pack all files in your data/ dir in how ever many .tar files you like, keeping the dir-structure equal to the unpacked version, and OpenTTD can handle them just like the files were unpacked
truelight
parents:
8070
diff
changeset
|
94 |
|
92edb3688fdf
(svn r11106) -Add: added .tar support; you can pack all files in your data/ dir in how ever many .tar files you like, keeping the dir-structure equal to the unpacked version, and OpenTTD can handle them just like the files were unpacked
truelight
parents:
8070
diff
changeset
|
95 |
typedef bool FioTarFileListCallback(const char *filename, int size, void *userdata); |
92edb3688fdf
(svn r11106) -Add: added .tar support; you can pack all files in your data/ dir in how ever many .tar files you like, keeping the dir-structure equal to the unpacked version, and OpenTTD can handle them just like the files were unpacked
truelight
parents:
8070
diff
changeset
|
96 |
FILE *FioTarFileList(const char *tar, const char *mode, size_t *filesize, FioTarFileListCallback *callback, void *userdata); |
7425
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
97 |
|
8088
7c1a4dd586ae
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
8080
diff
changeset
|
98 |
void FioFCloseFile(FILE *f); |
8070
959633559d9f
(svn r11099) -Codechange: allow on opening of a file via FioFOpenFile to request the size of the file, so we can keep that in mind
truelight
parents:
8066
diff
changeset
|
99 |
FILE *FioFOpenFile(const char *filename, const char *mode = "rb", Subdirectory subdir = DATA_DIR, size_t *filesize = NULL); |
7425
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
100 |
bool FioCheckFileExists(const char *filename, Subdirectory subdir = DATA_DIR); |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
101 |
char *FioGetFullPath(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir, const char *filename); |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
102 |
char *FioFindFullPath(char *buf, size_t buflen, Subdirectory subdir, const char *filename); |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
103 |
char *FioAppendDirectory(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir); |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
104 |
char *FioGetDirectory(char *buf, size_t buflen, Subdirectory subdir); |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
105 |
|
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
106 |
static inline const char *FioGetSubdirectory(Subdirectory subdir) |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
107 |
{ |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
108 |
extern const char *_subdirs[NUM_SUBDIRS]; |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
109 |
assert(subdir < NUM_SUBDIRS); |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
110 |
return _subdirs[subdir]; |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
111 |
} |
6624
554e5aee6c3f
(svn r9129) -Codechange: unify parts of DeterminePaths.
rubidium
parents:
6573
diff
changeset
|
112 |
|
7371
b86b05214afe
(svn r10116) -Fix [FS#850]: remove invalid characters (for the file system) from savegame names. Based on a patch by TheJosh.
rubidium
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); |
8627
448ebf3a8291
(svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents:
8626
diff
changeset
|
116 |
void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize); |
448ebf3a8291
(svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents:
8626
diff
changeset
|
117 |
bool FileExists(const char *filename); |
0 | 118 |
|
7425
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
119 |
extern char *_personal_dir; ///< custom directory for personal settings, saves, newgrf, etc. |
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7392
diff
changeset
|
120 |
|
0 | 121 |
#endif /* FILEIO_H */ |