author | rubidium |
Thu, 01 Feb 2007 15:49:12 +0000 | |
changeset 5893 | 7e431a4abebb |
parent 5671 | c7b6e63f1996 |
child 6247 | 7d81e3a5d803 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
0 | 3 |
#ifndef SAVELOAD_H |
4 |
#define SAVELOAD_H |
|
5 |
||
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5475
diff
changeset
|
6 |
#ifdef SIZE_MAX |
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5475
diff
changeset
|
7 |
#undef SIZE_MAX |
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5475
diff
changeset
|
8 |
#endif |
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5475
diff
changeset
|
9 |
|
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5475
diff
changeset
|
10 |
#define SIZE_MAX ((size_t)-1) |
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5475
diff
changeset
|
11 |
|
2162
b98e430ffd10
(svn r2672) Move saving/loading related declarations to saveload.h
tron
parents:
1887
diff
changeset
|
12 |
typedef enum SaveOrLoadResult { |
3044
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
13 |
SL_OK = 0, // completed successfully |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
14 |
SL_ERROR = 1, // error that was caught before internal structures were modified |
2162
b98e430ffd10
(svn r2672) Move saving/loading related declarations to saveload.h
tron
parents:
1887
diff
changeset
|
15 |
SL_REINIT = 2, // error that was caught in the middle of updating game state, need to clear it. (can only happen during load) |
b98e430ffd10
(svn r2672) Move saving/loading related declarations to saveload.h
tron
parents:
1887
diff
changeset
|
16 |
} SaveOrLoadResult; |
b98e430ffd10
(svn r2672) Move saving/loading related declarations to saveload.h
tron
parents:
1887
diff
changeset
|
17 |
|
b98e430ffd10
(svn r2672) Move saving/loading related declarations to saveload.h
tron
parents:
1887
diff
changeset
|
18 |
typedef enum SaveOrLoadMode { |
3044
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
19 |
SL_INVALID = -1, |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
20 |
SL_LOAD = 0, |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
21 |
SL_SAVE = 1, |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
22 |
SL_OLD_LOAD = 2, |
4300
c7e43c47a2b9
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4257
diff
changeset
|
23 |
SL_PNG = 3, |
c7e43c47a2b9
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4257
diff
changeset
|
24 |
SL_BMP = 4, |
2162
b98e430ffd10
(svn r2672) Move saving/loading related declarations to saveload.h
tron
parents:
1887
diff
changeset
|
25 |
} SaveOrLoadMode; |
b98e430ffd10
(svn r2672) Move saving/loading related declarations to saveload.h
tron
parents:
1887
diff
changeset
|
26 |
|
b98e430ffd10
(svn r2672) Move saving/loading related declarations to saveload.h
tron
parents:
1887
diff
changeset
|
27 |
SaveOrLoadResult SaveOrLoad(const char *filename, int mode); |
2285
410dedcf46d1
(svn r2809) Implement more generic threading functions, which allow more than one thread
tron
parents:
2186
diff
changeset
|
28 |
void WaitTillSaved(void); |
4548
6165e12570bf
(svn r6380) -Codechange: unify all ways to quit OTTD.
rubidium
parents:
4344
diff
changeset
|
29 |
void DoExitSave(void); |
2162
b98e430ffd10
(svn r2672) Move saving/loading related declarations to saveload.h
tron
parents:
1887
diff
changeset
|
30 |
|
b98e430ffd10
(svn r2672) Move saving/loading related declarations to saveload.h
tron
parents:
1887
diff
changeset
|
31 |
|
1093
4fdc46eaf423
(svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents:
1024
diff
changeset
|
32 |
typedef void ChunkSaveLoadProc(void); |
0 | 33 |
typedef void AutolengthProc(void *arg); |
34 |
||
35 |
typedef struct { |
|
36 |
uint32 id; |
|
37 |
ChunkSaveLoadProc *save_proc; |
|
38 |
ChunkSaveLoadProc *load_proc; |
|
39 |
uint32 flags; |
|
40 |
} ChunkHandler; |
|
41 |
||
42 |
typedef struct { |
|
43 |
byte null; |
|
44 |
} NullStruct; |
|
45 |
||
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
46 |
typedef enum SLRefType { |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
47 |
REF_ORDER = 0, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
48 |
REF_VEHICLE = 1, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
49 |
REF_STATION = 2, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
50 |
REF_TOWN = 3, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
51 |
REF_VEHICLE_OLD = 4, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
52 |
REF_ROADSTOPS = 5, |
2848 | 53 |
REF_ENGINE_RENEWS = 6, |
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
54 |
} SLRefType; |
0 | 55 |
|
3044
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
56 |
#define SL_MAX_VERSION 255 |
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
57 |
|
0 | 58 |
enum { |
59 |
INC_VEHICLE_COMMON = 0, |
|
60 |
}; |
|
61 |
||
62 |
enum { |
|
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
63 |
CH_RIFF = 0, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
64 |
CH_ARRAY = 1, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
65 |
CH_SPARSE_ARRAY = 2, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
66 |
CH_TYPE_MASK = 3, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
67 |
CH_LAST = 8, |
3044
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
68 |
CH_AUTO_LENGTH = 16, |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
69 |
|
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
70 |
CH_PRI_0 = 0 << 4, |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
71 |
CH_PRI_1 = 1 << 4, |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
72 |
CH_PRI_2 = 2 << 4, |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
73 |
CH_PRI_3 = 3 << 4, |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
74 |
CH_PRI_SHL = 4, |
0 | 75 |
CH_NUM_PRI_LEVELS = 4, |
76 |
}; |
|
77 |
||
3114
a4ee405be667
(svn r3718) - Add proper Doxygen comments to some saveload-structs (using ///<)
Darkvater
parents:
3108
diff
changeset
|
78 |
/** VarTypes is the general bitmasked magic type that tells us |
a4ee405be667
(svn r3718) - Add proper Doxygen comments to some saveload-structs (using ///<)
Darkvater
parents:
3108
diff
changeset
|
79 |
* certain characteristics about the variable it refers to. For example |
a4ee405be667
(svn r3718) - Add proper Doxygen comments to some saveload-structs (using ///<)
Darkvater
parents:
3108
diff
changeset
|
80 |
* SLE_FILE_* gives the size(type) as it would be in the savegame and |
a4ee405be667
(svn r3718) - Add proper Doxygen comments to some saveload-structs (using ///<)
Darkvater
parents:
3108
diff
changeset
|
81 |
* SLE_VAR_* the size(type) as it is in memory during runtime. These are |
a4ee405be667
(svn r3718) - Add proper Doxygen comments to some saveload-structs (using ///<)
Darkvater
parents:
3108
diff
changeset
|
82 |
* the first 8 bytes (0-3 SLE_FILE, 4-7 SLE_VAR). |
a4ee405be667
(svn r3718) - Add proper Doxygen comments to some saveload-structs (using ///<)
Darkvater
parents:
3108
diff
changeset
|
83 |
* Bytes 8-15 are reserved for various flags as explained below */ |
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
84 |
enum VarTypes { |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
85 |
/* 4 bytes allocated a maximum of 16 types for NumberType */ |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
86 |
SLE_FILE_I8 = 0, |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
87 |
SLE_FILE_U8 = 1, |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
88 |
SLE_FILE_I16 = 2, |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
89 |
SLE_FILE_U16 = 3, |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
90 |
SLE_FILE_I32 = 4, |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
91 |
SLE_FILE_U32 = 5, |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
92 |
SLE_FILE_I64 = 6, |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
93 |
SLE_FILE_U64 = 7, |
3114
a4ee405be667
(svn r3718) - Add proper Doxygen comments to some saveload-structs (using ///<)
Darkvater
parents:
3108
diff
changeset
|
94 |
SLE_FILE_STRINGID = 8, ///< StringID offset into strings-array |
3048
adf46229d390
(svn r3628) - Add BOOL and STRING types to saveload capabilities. String is unused up till now and it saves the full-buffer, regardless of how many characters the string actually has. So give a warning for that and figure it out later.
Darkvater
parents:
3046
diff
changeset
|
95 |
SLE_FILE_STRING = 9, |
3114
a4ee405be667
(svn r3718) - Add proper Doxygen comments to some saveload-structs (using ///<)
Darkvater
parents:
3108
diff
changeset
|
96 |
/* 6 more possible file-primitives */ |
0 | 97 |
|
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
98 |
/* 4 bytes allocated a maximum of 16 types for NumberType */ |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
99 |
SLE_VAR_BL = 0 << 4, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
100 |
SLE_VAR_I8 = 1 << 4, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
101 |
SLE_VAR_U8 = 2 << 4, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
102 |
SLE_VAR_I16 = 3 << 4, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
103 |
SLE_VAR_U16 = 4 << 4, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
104 |
SLE_VAR_I32 = 5 << 4, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
105 |
SLE_VAR_U32 = 6 << 4, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
106 |
SLE_VAR_I64 = 7 << 4, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
107 |
SLE_VAR_U64 = 8 << 4, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
108 |
SLE_VAR_NULL = 9 << 4, ///< useful to write zeros in savegame. |
5140
b1097c36a598
(svn r7228) -Codechange: [internal] Add the possibility to save/load string-pointers which do not
Darkvater
parents:
4548
diff
changeset
|
109 |
SLE_VAR_STRB = 10 << 4, ///< string (with pre-allocated buffer) |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
110 |
SLE_VAR_STRBQ = 11 << 4, ///< string enclosed in quotes (with pre-allocated buffer) |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
111 |
SLE_VAR_STR = 12 << 4, ///< string pointer |
5140
b1097c36a598
(svn r7228) -Codechange: [internal] Add the possibility to save/load string-pointers which do not
Darkvater
parents:
4548
diff
changeset
|
112 |
SLE_VAR_STRQ = 13 << 4, ///< string pointer enclosed in quotes |
4255
e550bf3de1c8
(svn r5871) -Feature: Add a possibility to handle pointer strings without a buffer from the configuration file. Handy for variables that will never be changed during runtime
Darkvater
parents:
3625
diff
changeset
|
113 |
/* 2 more possible memory-primitives */ |
0 | 114 |
|
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
115 |
/* Shortcut values */ |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
116 |
SLE_VAR_CHAR = SLE_VAR_I8, |
0 | 117 |
|
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
118 |
/* Default combinations of variables. As savegames change, so can variables |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
119 |
* and thus it is possible that the saved value and internal size do not |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
120 |
* match and you need to specify custom combo. The defaults are listed here */ |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
121 |
SLE_BOOL = SLE_FILE_I8 | SLE_VAR_BL, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
122 |
SLE_INT8 = SLE_FILE_I8 | SLE_VAR_I8, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
123 |
SLE_UINT8 = SLE_FILE_U8 | SLE_VAR_U8, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
124 |
SLE_INT16 = SLE_FILE_I16 | SLE_VAR_I16, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
125 |
SLE_UINT16 = SLE_FILE_U16 | SLE_VAR_U16, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
126 |
SLE_INT32 = SLE_FILE_I32 | SLE_VAR_I32, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
127 |
SLE_UINT32 = SLE_FILE_U32 | SLE_VAR_U32, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
128 |
SLE_INT64 = SLE_FILE_I64 | SLE_VAR_I64, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
129 |
SLE_UINT64 = SLE_FILE_U64 | SLE_VAR_U64, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
130 |
SLE_CHAR = SLE_FILE_I8 | SLE_VAR_CHAR, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
131 |
SLE_STRINGID = SLE_FILE_STRINGID | SLE_VAR_U16, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
132 |
SLE_STRINGBUF = SLE_FILE_STRING | SLE_VAR_STRB, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
133 |
SLE_STRINGBQUOTE = SLE_FILE_STRING | SLE_VAR_STRBQ, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
134 |
SLE_STRING = SLE_FILE_STRING | SLE_VAR_STR, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
135 |
SLE_STRINGQUOTE = SLE_FILE_STRING | SLE_VAR_STRQ, |
0 | 136 |
|
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
137 |
/* Shortcut values */ |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
138 |
SLE_UINT = SLE_UINT32, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
139 |
SLE_INT = SLE_INT32, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
140 |
SLE_STRB = SLE_STRINGBUF, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
141 |
SLE_STRBQ = SLE_STRINGBQUOTE, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
142 |
SLE_STR = SLE_STRING, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
143 |
SLE_STRQ = SLE_STRINGQUOTE, |
3115
24c7e92baa31
(svn r3719) - [1/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. This first part rewrites the configuration section to use the SaveLoad VarType in general.
Darkvater
parents:
3114
diff
changeset
|
144 |
|
24c7e92baa31
(svn r3719) - [1/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. This first part rewrites the configuration section to use the SaveLoad VarType in general.
Darkvater
parents:
3114
diff
changeset
|
145 |
/* 8 bytes allocated for a maximum of 8 flags |
24c7e92baa31
(svn r3719) - [1/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. This first part rewrites the configuration section to use the SaveLoad VarType in general.
Darkvater
parents:
3114
diff
changeset
|
146 |
* Flags directing saving/loading of a variable */ |
24c7e92baa31
(svn r3719) - [1/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. This first part rewrites the configuration section to use the SaveLoad VarType in general.
Darkvater
parents:
3114
diff
changeset
|
147 |
SLF_SAVE_NO = 1 << 8, ///< do not save with savegame, basically player-based |
24c7e92baa31
(svn r3719) - [1/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. This first part rewrites the configuration section to use the SaveLoad VarType in general.
Darkvater
parents:
3114
diff
changeset
|
148 |
SLF_CONFIG_NO = 1 << 9, ///< do not save to config file |
24c7e92baa31
(svn r3719) - [1/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. This first part rewrites the configuration section to use the SaveLoad VarType in general.
Darkvater
parents:
3114
diff
changeset
|
149 |
SLF_NETWORK_NO = 1 << 10, ///< do not synchronize over network (but it is saved if SSF_SAVE_NO is not set) |
24c7e92baa31
(svn r3719) - [1/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. This first part rewrites the configuration section to use the SaveLoad VarType in general.
Darkvater
parents:
3114
diff
changeset
|
150 |
/* 5 more possible flags */ |
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
151 |
}; |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
152 |
|
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
153 |
typedef uint32 VarType; |
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
154 |
|
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
155 |
enum SaveLoadTypes { |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
156 |
SL_VAR = 0, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
157 |
SL_REF = 1, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
158 |
SL_ARR = 2, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
159 |
SL_STR = 3, |
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
160 |
// non-normal save-load types |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
161 |
SL_WRITEBYTE = 8, |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4300
diff
changeset
|
162 |
SL_INCLUDE = 9, |
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
163 |
SL_END = 15 |
0 | 164 |
}; |
165 |
||
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
166 |
typedef byte SaveLoadType; |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
167 |
|
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
168 |
/** SaveLoad type struct. Do NOT use this directly but use the SLE_ macros defined just below! */ |
2295
95e8858e9938
(svn r2819) Make variables, which are exclusive for internal use of the save/load code, static in saveload.c
tron
parents:
2285
diff
changeset
|
169 |
typedef struct SaveLoad { |
3114
a4ee405be667
(svn r3718) - Add proper Doxygen comments to some saveload-structs (using ///<)
Darkvater
parents:
3108
diff
changeset
|
170 |
SaveLoadType cmd; ///< the action to take with the saved/loaded type, All types need different action |
a4ee405be667
(svn r3718) - Add proper Doxygen comments to some saveload-structs (using ///<)
Darkvater
parents:
3108
diff
changeset
|
171 |
VarType conv; ///< type of the variable to be saved, int |
a4ee405be667
(svn r3718) - Add proper Doxygen comments to some saveload-structs (using ///<)
Darkvater
parents:
3108
diff
changeset
|
172 |
uint16 length; ///< (conditional) length of the variable (eg. arrays) (max array size is 65536 elements) |
a4ee405be667
(svn r3718) - Add proper Doxygen comments to some saveload-structs (using ///<)
Darkvater
parents:
3108
diff
changeset
|
173 |
uint16 version_from; ///< save/load the variable starting from this savegame version |
a4ee405be667
(svn r3718) - Add proper Doxygen comments to some saveload-structs (using ///<)
Darkvater
parents:
3108
diff
changeset
|
174 |
uint16 version_to; ///< save/load the variable until this savegame version |
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
175 |
/* NOTE: This element either denotes the address of the variable for a global |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
176 |
* variable, or the offset within a struct which is then bound to a variable |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
177 |
* during runtime. Decision on which one to use is controlled by the function |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
178 |
* that is called to save it. address: SlGlobList, offset: SlObject */ |
3114
a4ee405be667
(svn r3718) - Add proper Doxygen comments to some saveload-structs (using ///<)
Darkvater
parents:
3108
diff
changeset
|
179 |
void *address; ///< address of variable OR offset of variable in the struct (max offset is 65536) |
2295
95e8858e9938
(svn r2819) Make variables, which are exclusive for internal use of the save/load code, static in saveload.c
tron
parents:
2285
diff
changeset
|
180 |
} SaveLoad; |
0 | 181 |
|
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
182 |
/* Same as SaveLoad but global variables are used (for better readability); */ |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
183 |
typedef SaveLoad SaveLoadGlobVarList; |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
184 |
|
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
185 |
/* Simple variables, references (pointers) and arrays */ |
5671
c7b6e63f1996
(svn r8131) -Fix (r8125): g++ warning: 'invalid access to non-static data member ?<class>::<member>? of NULL object'. It is weird, but renaming the 'offsetof' macro helped.
KUDr
parents:
5587
diff
changeset
|
186 |
#define SLE_GENERAL(cmd, base, variable, type, length, from, to) {cmd, type, length, from, to, (void*)cpp_offsetof(base, variable)} |
3044
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
187 |
#define SLE_CONDVAR(base, variable, type, from, to) SLE_GENERAL(SL_VAR, base, variable, type, 0, from, to) |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
188 |
#define SLE_CONDREF(base, variable, type, from, to) SLE_GENERAL(SL_REF, base, variable, type, 0, from, to) |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
189 |
#define SLE_CONDARR(base, variable, type, length, from, to) SLE_GENERAL(SL_ARR, base, variable, type, length, from, to) |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
190 |
#define SLE_CONDSTR(base, variable, type, length, from, to) SLE_GENERAL(SL_STR, base, variable, type, length, from, to) |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
191 |
|
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
192 |
#define SLE_VAR(base, variable, type) SLE_CONDVAR(base, variable, type, 0, SL_MAX_VERSION) |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
193 |
#define SLE_REF(base, variable, type) SLE_CONDREF(base, variable, type, 0, SL_MAX_VERSION) |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
194 |
#define SLE_ARR(base, variable, type, length) SLE_CONDARR(base, variable, type, length, 0, SL_MAX_VERSION) |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
195 |
#define SLE_STR(base, variable, type, length) SLE_CONDSTR(base, variable, type, length, 0, SL_MAX_VERSION) |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
196 |
|
3240
204f995f25df
(svn r3914) - Properly implement SDT(G)_CONDNULL macro's without special cases (add flag SLF_CONFIG_NO and empty string as name)
Darkvater
parents:
3222
diff
changeset
|
197 |
#define SLE_CONDNULL(length, from, to) SLE_CONDARR(NullStruct, null, SLE_FILE_U8 | SLE_VAR_NULL | SLF_CONFIG_NO, length, from, to) |
3222
6de22e06a1e9
(svn r3895) - Add proper SLE(G)_CONDNULL macros for the empty space reservation in savegames and update where used
Darkvater
parents:
3117
diff
changeset
|
198 |
|
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
199 |
/* Translate values ingame to different values in the savegame and vv */ |
3044
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
200 |
#define SLE_WRITEBYTE(base, variable, game_value, file_value) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, game_value, file_value) |
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
201 |
/* Load common code and put it into each struct (currently only for vehicles */ |
3044
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
202 |
#define SLE_INCLUDE(base, variable, include_index) SLE_GENERAL(SL_INCLUDE, base, variable, 0, 0, include_index, 0) |
0 | 203 |
|
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
204 |
/* The same as the ones at the top, only the offset is given directly; used for unions */ |
3073
3b0cbae12231
(svn r3662) Fix regression FS#58 with union, endiannes and static decleration problems. Removed the union.
Darkvater
parents:
3072
diff
changeset
|
205 |
#define SLE_GENERALX(cmd, offset, type, param1, param2) {cmd, type, 0, param1, param2, (void*)(offset)} |
3044
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
206 |
#define SLE_CONDVARX(offset, type, from, to) SLE_GENERALX(SL_VAR, offset, type, from, to) |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
207 |
#define SLE_CONDREFX(offset, type, from, to) SLE_GENERALX(SL_REF, offset, type, from, to) |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
208 |
|
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
209 |
#define SLE_VARX(offset, type) SLE_CONDVARX(offset, type, 0, SL_MAX_VERSION) |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
210 |
#define SLE_REFX(offset, type) SLE_CONDREFX(offset, type, 0, SL_MAX_VERSION) |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
211 |
|
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
212 |
#define SLE_WRITEBYTEX(offset, something) SLE_GENERALX(SL_WRITEBYTE, offset, 0, something, 0) |
fbaef2401476
(svn r3624) - CodeChange: Some cosmetic changes in the saveload code;
Darkvater
parents:
2848
diff
changeset
|
213 |
#define SLE_INCLUDEX(offset, type) SLE_GENERALX(SL_INCLUDE, offset, type, 0, SL_MAX_VERSION) |
0 | 214 |
|
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
215 |
/* End marker */ |
3073
3b0cbae12231
(svn r3662) Fix regression FS#58 with union, endiannes and static decleration problems. Removed the union.
Darkvater
parents:
3072
diff
changeset
|
216 |
#define SLE_END() {SL_END, 0, 0, 0, 0, NULL} |
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
217 |
|
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
218 |
/* Simple variables, references (pointers) and arrays, but for global variables */ |
3073
3b0cbae12231
(svn r3662) Fix regression FS#58 with union, endiannes and static decleration problems. Removed the union.
Darkvater
parents:
3072
diff
changeset
|
219 |
#define SLEG_GENERAL(cmd, variable, type, length, from, to) {cmd, type, length, from, to, (void*)&variable} |
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
220 |
|
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
221 |
#define SLEG_CONDVAR(variable, type, from, to) SLEG_GENERAL(SL_VAR, variable, type, 0, from, to) |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
222 |
#define SLEG_CONDREF(variable, type, from, to) SLEG_GENERAL(SL_REF, variable, type, 0, from, to) |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
223 |
#define SLEG_CONDARR(variable, type, length, from, to) SLEG_GENERAL(SL_ARR, variable, type, length, from, to) |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
224 |
#define SLEG_CONDSTR(variable, type, length, from, to) SLEG_GENERAL(SL_STR, variable, type, length, from, to) |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
225 |
|
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
226 |
#define SLEG_VAR(variable, type) SLEG_CONDVAR(variable, type, 0, SL_MAX_VERSION) |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
227 |
#define SLEG_REF(variable, type) SLEG_CONDREF(variable, type, 0, SL_MAX_VERSION) |
3222
6de22e06a1e9
(svn r3895) - Add proper SLE(G)_CONDNULL macros for the empty space reservation in savegames and update where used
Darkvater
parents:
3117
diff
changeset
|
228 |
#define SLEG_ARR(variable, type) SLEG_CONDARR(variable, type, lengthof(variable), 0, SL_MAX_VERSION) |
6de22e06a1e9
(svn r3895) - Add proper SLE(G)_CONDNULL macros for the empty space reservation in savegames and update where used
Darkvater
parents:
3117
diff
changeset
|
229 |
#define SLEG_STR(variable, type) SLEG_CONDSTR(variable, type, lengthof(variable), 0, SL_MAX_VERSION) |
6de22e06a1e9
(svn r3895) - Add proper SLE(G)_CONDNULL macros for the empty space reservation in savegames and update where used
Darkvater
parents:
3117
diff
changeset
|
230 |
|
3240
204f995f25df
(svn r3914) - Properly implement SDT(G)_CONDNULL macro's without special cases (add flag SLF_CONFIG_NO and empty string as name)
Darkvater
parents:
3222
diff
changeset
|
231 |
#define SLEG_CONDNULL(length, from, to) {SL_ARR, SLE_FILE_U8 | SLE_VAR_NULL | SLF_CONFIG_NO, length, from, to, (void*)NULL} |
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
232 |
|
3073
3b0cbae12231
(svn r3662) Fix regression FS#58 with union, endiannes and static decleration problems. Removed the union.
Darkvater
parents:
3072
diff
changeset
|
233 |
#define SLEG_END() {SL_END, 0, 0, 0, 0, NULL} |
0 | 234 |
|
2685
805a28b7c3b7
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2380
diff
changeset
|
235 |
/** Checks if the savegame is below major.minor. |
805a28b7c3b7
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2380
diff
changeset
|
236 |
*/ |
805a28b7c3b7
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2380
diff
changeset
|
237 |
static inline bool CheckSavegameVersionOldStyle(uint16 major, byte minor) |
805a28b7c3b7
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2380
diff
changeset
|
238 |
{ |
3045
0364fedfd355
(svn r3625) - Move sl_version inside the functions where they are used to force usage.
Darkvater
parents:
3044
diff
changeset
|
239 |
extern uint16 _sl_version; |
0364fedfd355
(svn r3625) - Move sl_version inside the functions where they are used to force usage.
Darkvater
parents:
3044
diff
changeset
|
240 |
extern byte _sl_minor_version; |
2685
805a28b7c3b7
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2380
diff
changeset
|
241 |
return (_sl_version < major) || (_sl_version == major && _sl_minor_version < minor); |
805a28b7c3b7
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2380
diff
changeset
|
242 |
} |
805a28b7c3b7
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2380
diff
changeset
|
243 |
|
805a28b7c3b7
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2380
diff
changeset
|
244 |
/** Checks if the savegame is below version. |
805a28b7c3b7
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2380
diff
changeset
|
245 |
*/ |
805a28b7c3b7
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2380
diff
changeset
|
246 |
static inline bool CheckSavegameVersion(uint16 version) |
805a28b7c3b7
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2380
diff
changeset
|
247 |
{ |
3045
0364fedfd355
(svn r3625) - Move sl_version inside the functions where they are used to force usage.
Darkvater
parents:
3044
diff
changeset
|
248 |
extern uint16 _sl_version; |
2685
805a28b7c3b7
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2380
diff
changeset
|
249 |
return _sl_version < version; |
805a28b7c3b7
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2380
diff
changeset
|
250 |
} |
805a28b7c3b7
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2380
diff
changeset
|
251 |
|
3117
4c9e8842598e
(svn r3721) - [3/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. From part 3 on, OpenTTD is once again compilable.
Darkvater
parents:
3115
diff
changeset
|
252 |
/** Checks if some version from/to combination falls within the range of the |
4c9e8842598e
(svn r3721) - [3/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. From part 3 on, OpenTTD is once again compilable.
Darkvater
parents:
3115
diff
changeset
|
253 |
* active savegame version */ |
4c9e8842598e
(svn r3721) - [3/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. From part 3 on, OpenTTD is once again compilable.
Darkvater
parents:
3115
diff
changeset
|
254 |
static inline bool SlIsObjectCurrentlyValid(uint16 version_from, uint16 version_to) |
4c9e8842598e
(svn r3721) - [3/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. From part 3 on, OpenTTD is once again compilable.
Darkvater
parents:
3115
diff
changeset
|
255 |
{ |
4c9e8842598e
(svn r3721) - [3/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. From part 3 on, OpenTTD is once again compilable.
Darkvater
parents:
3115
diff
changeset
|
256 |
extern const uint16 SAVEGAME_VERSION; |
4c9e8842598e
(svn r3721) - [3/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. From part 3 on, OpenTTD is once again compilable.
Darkvater
parents:
3115
diff
changeset
|
257 |
if (SAVEGAME_VERSION < version_from || SAVEGAME_VERSION > version_to) return false; |
4c9e8842598e
(svn r3721) - [3/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. From part 3 on, OpenTTD is once again compilable.
Darkvater
parents:
3115
diff
changeset
|
258 |
|
4c9e8842598e
(svn r3721) - [3/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. From part 3 on, OpenTTD is once again compilable.
Darkvater
parents:
3115
diff
changeset
|
259 |
return true; |
4c9e8842598e
(svn r3721) - [3/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. From part 3 on, OpenTTD is once again compilable.
Darkvater
parents:
3115
diff
changeset
|
260 |
} |
4c9e8842598e
(svn r3721) - [3/4] Present the game with a unified structure for the configuration-ini, saveload, console and gui representations of the settings. From part 3 on, OpenTTD is once again compilable.
Darkvater
parents:
3115
diff
changeset
|
261 |
|
3108
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
262 |
/* Get the NumberType of a setting. This describes the integer type |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
263 |
* as it is represented in memory |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
264 |
* @param type VarType holding information about the variable-type |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
265 |
* @return return the SLE_VAR_* part of a variable-type description */ |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
266 |
static inline VarType GetVarMemType(VarType type) |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
267 |
{ |
3625
929df0b3484a
(svn r4524) - Codechange: Use GB() macros for getting the saveload file/memory types
Darkvater
parents:
3240
diff
changeset
|
268 |
return type & 0xF0; // GB(type, 4, 4) << 4; |
3108
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
269 |
} |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
270 |
|
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
271 |
/* Get the FileType of a setting. This describes the integer type |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
272 |
* as it is represented in a savegame/file |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
273 |
* @param type VarType holding information about the variable-type |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
274 |
* @param return the SLE_FILE_* part of a variable-type description */ |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
275 |
static inline VarType GetVarFileType(VarType type) |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
276 |
{ |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
277 |
return type & 0xF; // GB(type, 0, 4); |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
278 |
} |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
279 |
|
5141
63e24cb6f071
(svn r7231) -Codechange: rename ini_get_variable to GetVariableAddress for use both in settings.c
Darkvater
parents:
5140
diff
changeset
|
280 |
/** Get the address of the variable. Which one to pick depends on the object |
63e24cb6f071
(svn r7231) -Codechange: rename ini_get_variable to GetVariableAddress for use both in settings.c
Darkvater
parents:
5140
diff
changeset
|
281 |
* pointer. If it is NULL we are dealing with global variables so the address |
63e24cb6f071
(svn r7231) -Codechange: rename ini_get_variable to GetVariableAddress for use both in settings.c
Darkvater
parents:
5140
diff
changeset
|
282 |
* is taken. If non-null only the offset is stored in the union and we need |
63e24cb6f071
(svn r7231) -Codechange: rename ini_get_variable to GetVariableAddress for use both in settings.c
Darkvater
parents:
5140
diff
changeset
|
283 |
* to add this to the address of the object */ |
63e24cb6f071
(svn r7231) -Codechange: rename ini_get_variable to GetVariableAddress for use both in settings.c
Darkvater
parents:
5140
diff
changeset
|
284 |
static inline void *GetVariableAddress(const void *object, const SaveLoad *sld) |
63e24cb6f071
(svn r7231) -Codechange: rename ini_get_variable to GetVariableAddress for use both in settings.c
Darkvater
parents:
5140
diff
changeset
|
285 |
{ |
63e24cb6f071
(svn r7231) -Codechange: rename ini_get_variable to GetVariableAddress for use both in settings.c
Darkvater
parents:
5140
diff
changeset
|
286 |
return (byte*)object + (ptrdiff_t)sld->address; |
63e24cb6f071
(svn r7231) -Codechange: rename ini_get_variable to GetVariableAddress for use both in settings.c
Darkvater
parents:
5140
diff
changeset
|
287 |
} |
63e24cb6f071
(svn r7231) -Codechange: rename ini_get_variable to GetVariableAddress for use both in settings.c
Darkvater
parents:
5140
diff
changeset
|
288 |
|
3108
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
289 |
int64 ReadValue(const void *ptr, VarType conv); |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
290 |
void WriteValue(void *ptr, VarType conv, int64 val); |
797699723806
(svn r3711) - Extract the WriteValue() and ReadValue() parts of the saveload code to assign/read to/from a variable. Preparatory work to make this the general function type for such assignments
Darkvater
parents:
3073
diff
changeset
|
291 |
|
0 | 292 |
void SlSetArrayIndex(uint index); |
1093
4fdc46eaf423
(svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents:
1024
diff
changeset
|
293 |
int SlIterateArray(void); |
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
294 |
|
0 | 295 |
void SlAutolength(AutolengthProc *proc, void *arg); |
1093
4fdc46eaf423
(svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents:
1024
diff
changeset
|
296 |
uint SlGetFieldLength(void); |
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
297 |
void SlSetLength(size_t length); |
5142
ee34e9968a62
(svn r7232) -Codechange: Also allow for the save/load of non pre-allocated strings inside structs.
Darkvater
parents:
5141
diff
changeset
|
298 |
size_t SlCalcObjMemberLength(const void *object, const SaveLoad *sld); |
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
299 |
|
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
300 |
byte SlReadByte(void); |
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1217
diff
changeset
|
301 |
void SlWriteByte(byte b); |
3046
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
302 |
|
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
303 |
void SlGlobList(const SaveLoadGlobVarList *sldg); |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
304 |
void SlArray(void *array, uint length, VarType conv); |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
305 |
void SlObject(void *object, const SaveLoad *sld); |
baa216f9911a
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
Darkvater
parents:
3045
diff
changeset
|
306 |
bool SlObjectMember(void *object, const SaveLoad *sld); |
0 | 307 |
|
2380
392bba57462d
(svn r2906) Fix some threaded saving problems. Now the thread only interfaces with the main program through a sort of mutex. Communication uses the function OTTD_SendThreadMessage() with the approiate message which is handled in ProcessSentMessage() during the main loop.
Darkvater
parents:
2337
diff
changeset
|
308 |
void SaveFileStart(void); |
392bba57462d
(svn r2906) Fix some threaded saving problems. Now the thread only interfaces with the main program through a sort of mutex. Communication uses the function OTTD_SendThreadMessage() with the approiate message which is handled in ProcessSentMessage() during the main loop.
Darkvater
parents:
2337
diff
changeset
|
309 |
void SaveFileDone(void); |
392bba57462d
(svn r2906) Fix some threaded saving problems. Now the thread only interfaces with the main program through a sort of mutex. Communication uses the function OTTD_SendThreadMessage() with the approiate message which is handled in ProcessSentMessage() during the main loop.
Darkvater
parents:
2337
diff
changeset
|
310 |
void SaveFileError(void); |
0 | 311 |
#endif /* SAVELOAD_H */ |