fileio.h

Go to the documentation of this file.
00001 /* $Id: fileio.h 13827 2008-07-25 19:54:14Z rubidium $ */
00002 
00005 #ifndef FILEIO_H
00006 #define FILEIO_H
00007 
00008 #include <map>
00009 #include <string>
00010 #include "core/enum_type.hpp"
00011 
00012 void FioSeekTo(uint32 pos, int mode);
00013 void FioSeekToFile(uint8 slot, uint32 pos);
00014 uint32 FioGetPos();
00015 const char *FioGetFilename(uint8 slot);
00016 byte FioReadByte();
00017 uint16 FioReadWord();
00018 uint32 FioReadDword();
00019 void FioCloseAll();
00020 void FioOpenFile(int slot, const char *filename);
00021 void FioReadBlock(void *ptr, uint size);
00022 void FioSkipBytes(int n);
00023 void FioCreateDirectory(const char *filename);
00024 
00028 enum Subdirectory {
00029   BASE_DIR,      
00030   SAVE_DIR,      
00031   AUTOSAVE_DIR,  
00032   SCENARIO_DIR,  
00033   HEIGHTMAP_DIR, 
00034   GM_DIR,        
00035   DATA_DIR,      
00036   LANG_DIR,      
00037   NUM_SUBDIRS,   
00038   NO_DIRECTORY,  
00039 };
00040 
00044 enum Searchpath {
00045   SP_FIRST_DIR,
00046   SP_WORKING_DIR = SP_FIRST_DIR, 
00047   SP_PERSONAL_DIR,               
00048   SP_SHARED_DIR,                 
00049   SP_BINARY_DIR,                 
00050   SP_INSTALLATION_DIR,           
00051   SP_APPLICATION_BUNDLE_DIR,     
00052   NUM_SEARCHPATHS
00053 };
00054 
00055 DECLARE_POSTFIX_INCREMENT(Searchpath);
00056 
00063 extern const char *_searchpaths[NUM_SEARCHPATHS];
00064 
00068 struct TarListEntry {
00069   const char *filename;
00070   TarListEntry() : filename(NULL) {}
00071   ~TarListEntry() { free((void*)this->filename); }
00072 };
00073 struct TarFileListEntry {
00074   const char *tar_filename;
00075   int size;
00076   int position;
00077 };
00078 typedef std::map<std::string, TarListEntry> TarList;
00079 typedef std::map<std::string, TarFileListEntry> TarFileList;
00080 extern TarList _tar_list;
00081 extern TarFileList _tar_filelist;
00082 
00088 static inline bool IsValidSearchPath(Searchpath sp)
00089 {
00090   return sp < NUM_SEARCHPATHS && _searchpaths[sp] != NULL;
00091 }
00092 
00094 #define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp))
00095 #define FOR_ALL_TARS(tar) for (tar = _tar_filelist.begin(); tar != _tar_filelist.end(); tar++)
00096 
00097 typedef bool FioTarFileListCallback(const char *filename, int size, void *userdata);
00098 FILE *FioTarFileList(const char *tar, const char *mode, size_t *filesize, FioTarFileListCallback *callback, void *userdata);
00099 
00100 void FioFCloseFile(FILE *f);
00101 FILE *FioFOpenFile(const char *filename, const char *mode = "rb", Subdirectory subdir = DATA_DIR, size_t *filesize = NULL);
00102 bool FioCheckFileExists(const char *filename, Subdirectory subdir = DATA_DIR);
00103 char *FioGetFullPath(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir, const char *filename);
00104 char *FioFindFullPath(char *buf, size_t buflen, Subdirectory subdir, const char *filename);
00105 char *FioAppendDirectory(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir);
00106 char *FioGetDirectory(char *buf, size_t buflen, Subdirectory subdir);
00107 
00108 static inline const char *FioGetSubdirectory(Subdirectory subdir)
00109 {
00110   extern const char *_subdirs[NUM_SUBDIRS];
00111   assert(subdir < NUM_SUBDIRS);
00112   return _subdirs[subdir];
00113 }
00114 
00115 void SanitizeFilename(char *filename);
00116 void AppendPathSeparator(char *buf, size_t buflen);
00117 void DeterminePaths(const char *exe);
00118 void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize);
00119 bool FileExists(const char *filename);
00120 
00121 extern char *_personal_dir; 
00122 
00123 #endif /* FILEIO_H */

Generated on Mon Sep 22 20:34:15 2008 for openttd by  doxygen 1.5.6