#include "fileio.h"
Go to the source code of this file.
Data Structures | |
struct | ChunkHandler |
struct | NullStruct |
struct | SaveLoad |
SaveLoad type struct. More... | |
Defines | |
#define | SIZE_MAX ((size_t)-1) |
#define | SL_MAX_VERSION 255 |
#define | SLE_GENERAL(cmd, base, variable, type, length, from, to) {false, cmd, type, length, from, to, (void*)cpp_offsetof(base, variable)} |
#define | SLE_CONDVAR(base, variable, type, from, to) SLE_GENERAL(SL_VAR, base, variable, type, 0, from, to) |
#define | SLE_CONDREF(base, variable, type, from, to) SLE_GENERAL(SL_REF, base, variable, type, 0, from, to) |
#define | SLE_CONDARR(base, variable, type, length, from, to) SLE_GENERAL(SL_ARR, base, variable, type, length, from, to) |
#define | SLE_CONDSTR(base, variable, type, length, from, to) SLE_GENERAL(SL_STR, base, variable, type, length, from, to) |
#define | SLE_CONDLST(base, variable, type, from, to) SLE_GENERAL(SL_LST, base, variable, type, 0, from, to) |
#define | SLE_VAR(base, variable, type) SLE_CONDVAR(base, variable, type, 0, SL_MAX_VERSION) |
#define | SLE_REF(base, variable, type) SLE_CONDREF(base, variable, type, 0, SL_MAX_VERSION) |
#define | SLE_ARR(base, variable, type, length) SLE_CONDARR(base, variable, type, length, 0, SL_MAX_VERSION) |
#define | SLE_STR(base, variable, type, length) SLE_CONDSTR(base, variable, type, length, 0, SL_MAX_VERSION) |
#define | SLE_LST(base, variable, type) SLE_CONDLST(base, variable, type, 0, SL_MAX_VERSION) |
#define | SLE_CONDNULL(length, from, to) SLE_CONDARR(NullStruct, null, SLE_FILE_U8 | SLE_VAR_NULL | SLF_CONFIG_NO, length, from, to) |
#define | SLE_WRITEBYTE(base, variable, value) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, value, value) |
#define | SLE_GENERALX(cmd, offset, type, length, param1, param2) {false, cmd, type, length, param1, param2, (void*)(offset)} |
#define | SLE_CONDVARX(offset, type, from, to) SLE_GENERALX(SL_VAR, offset, type, 0, from, to) |
#define | SLE_CONDARRX(offset, type, length, from, to) SLE_GENERALX(SL_ARR, offset, type, length, from, to) |
#define | SLE_CONDREFX(offset, type, from, to) SLE_GENERALX(SL_REF, offset, type, 0, from, to) |
#define | SLE_VARX(offset, type) SLE_CONDVARX(offset, type, 0, SL_MAX_VERSION) |
#define | SLE_REFX(offset, type) SLE_CONDREFX(offset, type, 0, SL_MAX_VERSION) |
#define | SLE_WRITEBYTEX(offset, something) SLE_GENERALX(SL_WRITEBYTE, offset, 0, 0, something, 0) |
#define | SLE_VEH_INCLUDEX() SLE_GENERALX(SL_VEH_INCLUDE, 0, 0, 0, 0, SL_MAX_VERSION) |
#define | SLE_END() {false, SL_END, 0, 0, 0, 0, NULL} |
#define | SLEG_GENERAL(cmd, variable, type, length, from, to) {true, cmd, type, length, from, to, (void*)&variable} |
#define | SLEG_CONDVAR(variable, type, from, to) SLEG_GENERAL(SL_VAR, variable, type, 0, from, to) |
#define | SLEG_CONDREF(variable, type, from, to) SLEG_GENERAL(SL_REF, variable, type, 0, from, to) |
#define | SLEG_CONDARR(variable, type, length, from, to) SLEG_GENERAL(SL_ARR, variable, type, length, from, to) |
#define | SLEG_CONDSTR(variable, type, length, from, to) SLEG_GENERAL(SL_STR, variable, type, length, from, to) |
#define | SLEG_CONDLST(variable, type, from, to) SLEG_GENERAL(SL_LST, variable, type, 0, from, to) |
#define | SLEG_VAR(variable, type) SLEG_CONDVAR(variable, type, 0, SL_MAX_VERSION) |
#define | SLEG_REF(variable, type) SLEG_CONDREF(variable, type, 0, SL_MAX_VERSION) |
#define | SLEG_ARR(variable, type) SLEG_CONDARR(variable, type, lengthof(variable), 0, SL_MAX_VERSION) |
#define | SLEG_STR(variable, type) SLEG_CONDSTR(variable, type, lengthof(variable), 0, SL_MAX_VERSION) |
#define | SLEG_LST(variable, type) SLEG_CONDLST(variable, type, 0, SL_MAX_VERSION) |
#define | SLEG_CONDNULL(length, from, to) {true, SL_ARR, SLE_FILE_U8 | SLE_VAR_NULL | SLF_CONFIG_NO, length, from, to, (void*)NULL} |
#define | SLEG_END() {true, SL_END, 0, 0, 0, 0, NULL} |
Typedefs | |
typedef void | ChunkSaveLoadProc () |
typedef void | AutolengthProc (void *arg) |
typedef uint32 | VarType |
typedef byte | SaveLoadType |
typedef SaveLoad | SaveLoadGlobVarList |
Enumerations | |
enum | SaveOrLoadResult { SL_OK = 0, SL_ERROR = 1, SL_REINIT = 2 } |
enum | SaveOrLoadMode { SL_INVALID = -1, SL_LOAD = 0, SL_SAVE = 1, SL_OLD_LOAD = 2, SL_PNG = 3, SL_BMP = 4 } |
enum | SLRefType { REF_ORDER = 0, REF_VEHICLE = 1, REF_STATION = 2, REF_TOWN = 3, REF_VEHICLE_OLD = 4, REF_ROADSTOPS = 5, REF_ENGINE_RENEWS = 6, REF_CARGO_PACKET = 7 } |
enum | { INC_VEHICLE_COMMON = 0 } |
enum | { CH_RIFF = 0, CH_ARRAY = 1, CH_SPARSE_ARRAY = 2, CH_TYPE_MASK = 3, CH_LAST = 8, CH_AUTO_LENGTH = 16, CH_PRI_0 = 0 << 4, CH_PRI_1 = 1 << 4, CH_PRI_2 = 2 << 4, CH_PRI_3 = 3 << 4, CH_PRI_SHL = 4, CH_NUM_PRI_LEVELS = 4 } |
enum | VarTypes { SLE_FILE_I8 = 0, SLE_FILE_U8 = 1, SLE_FILE_I16 = 2, SLE_FILE_U16 = 3, SLE_FILE_I32 = 4, SLE_FILE_U32 = 5, SLE_FILE_I64 = 6, SLE_FILE_U64 = 7, SLE_FILE_STRINGID = 8, SLE_FILE_STRING = 9, SLE_VAR_BL = 0 << 4, SLE_VAR_I8 = 1 << 4, SLE_VAR_U8 = 2 << 4, SLE_VAR_I16 = 3 << 4, SLE_VAR_U16 = 4 << 4, SLE_VAR_I32 = 5 << 4, SLE_VAR_U32 = 6 << 4, SLE_VAR_I64 = 7 << 4, SLE_VAR_U64 = 8 << 4, SLE_VAR_NULL = 9 << 4, SLE_VAR_STRB = 10 << 4, SLE_VAR_STRBQ = 11 << 4, SLE_VAR_STR = 12 << 4, SLE_VAR_STRQ = 13 << 4, SLE_VAR_NAME = 14 << 4, SLE_VAR_CHAR = SLE_VAR_I8, SLE_BOOL = SLE_FILE_I8 | SLE_VAR_BL, SLE_INT8 = SLE_FILE_I8 | SLE_VAR_I8, SLE_UINT8 = SLE_FILE_U8 | SLE_VAR_U8, SLE_INT16 = SLE_FILE_I16 | SLE_VAR_I16, SLE_UINT16 = SLE_FILE_U16 | SLE_VAR_U16, SLE_INT32 = SLE_FILE_I32 | SLE_VAR_I32, SLE_UINT32 = SLE_FILE_U32 | SLE_VAR_U32, SLE_INT64 = SLE_FILE_I64 | SLE_VAR_I64, SLE_UINT64 = SLE_FILE_U64 | SLE_VAR_U64, SLE_CHAR = SLE_FILE_I8 | SLE_VAR_CHAR, SLE_STRINGID = SLE_FILE_STRINGID | SLE_VAR_U16, SLE_STRINGBUF = SLE_FILE_STRING | SLE_VAR_STRB, SLE_STRINGBQUOTE = SLE_FILE_STRING | SLE_VAR_STRBQ, SLE_STRING = SLE_FILE_STRING | SLE_VAR_STR, SLE_STRINGQUOTE = SLE_FILE_STRING | SLE_VAR_STRQ, SLE_NAME = SLE_FILE_STRINGID | SLE_VAR_NAME, SLE_UINT = SLE_UINT32, SLE_INT = SLE_INT32, SLE_STRB = SLE_STRINGBUF, SLE_STRBQ = SLE_STRINGBQUOTE, SLE_STR = SLE_STRING, SLE_STRQ = SLE_STRINGQUOTE, SLF_SAVE_NO = 1 << 8, SLF_CONFIG_NO = 1 << 9, SLF_NETWORK_NO = 1 << 10 } |
VarTypes is the general bitmasked magic type that tells us certain characteristics about the variable it refers to. More... | |
enum | SaveLoadTypes { SL_VAR = 0, SL_REF = 1, SL_ARR = 2, SL_STR = 3, SL_LST = 4, SL_WRITEBYTE = 8, SL_VEH_INCLUDE = 9, SL_END = 15 } |
Functions | |
void | SetSaveLoadError (uint16 str) |
const char * | GetSaveLoadErrorString () |
Get the string representation of the error message. | |
SaveOrLoadResult | SaveOrLoad (const char *filename, int mode, Subdirectory sb) |
Main Save or Load function where the high-level saveload functions are handled. | |
void | WaitTillSaved () |
void | DoExitSave () |
Do a save when exiting the game (patch option) _patches.autosave_on_exit. | |
static bool | CheckSavegameVersionOldStyle (uint16 major, byte minor) |
Checks if the savegame is below major.minor. | |
static bool | CheckSavegameVersion (uint16 version) |
Checks if the savegame is below version. | |
static bool | SlIsObjectCurrentlyValid (uint16 version_from, uint16 version_to) |
Checks if some version from/to combination falls within the range of the active savegame version. | |
static VarType | GetVarMemType (VarType type) |
static VarType | GetVarFileType (VarType type) |
static void * | GetVariableAddress (const void *object, const SaveLoad *sld) |
Get the address of the variable. | |
int64 | ReadValue (const void *ptr, VarType conv) |
Return a signed-long version of the value of a setting. | |
void | WriteValue (void *ptr, VarType conv, int64 val) |
Write the value of a setting. | |
void | SlSetArrayIndex (uint index) |
int | SlIterateArray () |
Iterate through the elements of an array and read the whole thing. | |
void | SlAutolength (AutolengthProc *proc, void *arg) |
Do something of which I have no idea what it is :P. | |
uint | SlGetFieldLength () |
void | SlSetLength (size_t length) |
Sets the length of either a RIFF object or the number of items in an array. | |
size_t | SlCalcObjMemberLength (const void *object, const SaveLoad *sld) |
byte | SlReadByte () |
Wrapper for SlReadByteInternal. | |
void | SlWriteByte (byte b) |
Wrapper for SlWriteByteInternal. | |
void | SlGlobList (const SaveLoadGlobVarList *sldg) |
Save or Load (a list of) global variables. | |
void | SlArray (void *array, uint length, VarType conv) |
Save/Load an array. | |
void | SlObject (void *object, const SaveLoad *sld) |
Main SaveLoad function. | |
bool | SlObjectMember (void *object, const SaveLoad *sld) |
void | SaveFileStart () |
Update the gui accordingly when starting saving and set locks on saveload. | |
void | SaveFileDone () |
Update the gui accordingly when saving is done and release locks on saveload. | |
void | SaveFileError () |
Show a gui message when saving has failed. |
Definition in file saveload.h.
enum SaveOrLoadResult |
Definition at line 16 of file saveload.h.
enum VarTypes |
VarTypes is the general bitmasked magic type that tells us certain characteristics about the variable it refers to.
For example SLE_FILE_* gives the size(type) as it would be in the savegame and SLE_VAR_* the size(type) as it is in memory during runtime. These are the first 8 bytes (0-3 SLE_FILE, 4-7 SLE_VAR). Bytes 8-15 are reserved for various flags as explained below
Definition at line 91 of file saveload.h.
static void* GetVariableAddress | ( | const void * | object, | |
const SaveLoad * | sld | |||
) | [inline, static] |
Get the address of the variable.
Which one to pick depends on the object pointer. If it is NULL we are dealing with global variables so the address is taken. If non-null only the offset is stored in the union and we need to add this to the address of the object
Definition at line 298 of file saveload.h.
References SaveLoad::address.
Referenced by CmdChangePatchSetting(), ini_load_settings(), ini_save_settings(), LoadSettings(), PatchesSelectionWndProc(), SaveSettings(), SetPatchValue(), and SlObject().
int64 ReadValue | ( | const void * | ptr, | |
VarType | conv | |||
) |
Return a signed-long version of the value of a setting.
ptr | pointer to the variable | |
conv | type of variable, can be a non-clean type, eg one with other flags because it is parsed |
Definition at line 401 of file saveload.cpp.
References SLE_VAR_NULL.
Referenced by CmdChangePatchSetting(), ini_save_settings(), PatchesSelectionWndProc(), SetPatchValue(), and SlSaveLoadConv().
void SaveFileStart | ( | ) |
Update the gui accordingly when starting saving and set locks on saveload.
Also turn off fast-forward cause with that saving takes Aaaaages
Definition at line 1464 of file saveload.cpp.
References SendWindowMessage().
Referenced by SaveOrLoad().
SaveOrLoadResult SaveOrLoad | ( | const char * | filename, | |
int | mode, | |||
Subdirectory | sb | |||
) |
Main Save or Load function where the high-level saveload functions are handled.
It opens the savegame, selects format and checks versions
filename | The name of the savegame being created/loaded | |
mode | Save or load. Load can also be a TTD(Patch) game. Use SL_LOAD, SL_OLD_LOAD or SL_SAVE |
Definition at line 1591 of file saveload.cpp.
References _sl, _sl_minor_version, _sl_version, AbortSaveLoad(), BASE_DIR, FioFOpenFile(), GetSavegameFormat(), GetSaveLoadErrorString(), SaveLoadFormat::init_read, SaveLoadFormat::init_write, SaveLoadFormat::name, SaveLoadFormat::reader, SAVE_DIR, SaveFileDone(), SaveFileStart(), SaveFileToDisk(), SL_ERROR, SL_OK, SL_REINIT, SlError(), SlLoadChunks(), SlSaveChunks(), SlWriteFill(), SaveLoadFormat::tag, SaveLoadFormat::uninit_read, SaveLoadFormat::uninit_write, and SaveLoadFormat::writer.
Referenced by DoAutosave(), DoExitSave(), SafeSaveOrLoad(), and StartScenario().
void SlArray | ( | void * | array, | |
uint | length, | |||
VarType | conv | |||
) |
Save/Load an array.
array | The array being manipulated | |
length | The length of the array in elements | |
conv | VarType type of the atomic array (int, byte, uint64, etc.) |
Definition at line 611 of file saveload.cpp.
References _sl, _sl_version, BSWAP32(), SlCalcArrayLen(), SlCalcConvFileLen(), SlCalcConvMemLen(), SlCopyBytes(), SlSaveLoadConv(), and SlSetLength().
Referenced by Load_ANIT(), Save_ANIT(), SaveLoad_CAPR(), and SaveLoad_PRIC().
void SlAutolength | ( | AutolengthProc * | proc, | |
void * | arg | |||
) |
Do something of which I have no idea what it is :P.
proc | The callback procedure that is called | |
arg | The variable that will be used for the callback procedure |
Definition at line 862 of file saveload.cpp.
References _sl, SlError(), and SlSetLength().
void SlGlobList | ( | const SaveLoadGlobVarList * | sldg | ) |
Save or Load (a list of) global variables.
sldg | The global variable that is being loaded or saved |
Definition at line 852 of file saveload.cpp.
References SlObject().
int SlIterateArray | ( | ) |
Iterate through the elements of an array and read the whole thing.
Definition at line 299 of file saveload.cpp.
References _sl, and SlError().
Referenced by Load_SIGN(), and Load_VEHS().
void SlObject | ( | void * | object, | |
const SaveLoad * | sld | |||
) |
Main SaveLoad function.
object | The object that is being saved or loaded | |
sld | The SaveLoad description of the object so we know how to manipulate it |
Definition at line 834 of file saveload.cpp.
References _sl, SaveLoad::address, SaveLoad::cmd, GetVariableAddress(), SaveLoad::global, SlCalcObjLength(), and SlSetLength().
Referenced by Load_SIGN(), Load_VEHS(), Save_SIGN(), Save_VEHS(), SaveLoad_ECMY(), and SlGlobList().
void SlSetLength | ( | size_t | length | ) |
Sets the length of either a RIFF object or the number of items in an array.
This lets us load an object or an array of arbitrary size
length | The length of the sought object/array |
Definition at line 334 of file saveload.cpp.
References _sl.
Referenced by Save_ANIT(), SaveSettings(), SlArray(), SlAutolength(), SlList(), and SlObject().
void WriteValue | ( | void * | ptr, | |
VarType | conv, | |||
int64 | val | |||
) |
Write the value of a setting.
ptr | pointer to the variable | |
conv | type of variable, can be a non-clean type, eg with other flags. It is parsed upon read | |
val | the new value being given to the variable |
Definition at line 426 of file saveload.cpp.
References SLE_VAR_NAME, and SLE_VAR_NULL.
Referenced by SlSaveLoadConv(), and Write_ValidateSetting().