(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.
/* $Id$ */
#ifndef SETTINGS_H
#define SETTINGS_H
/* Convention/Type of settings. This will be merged mostly with the SaveLoad
* SLE_ enums. So it looks a bit strange. The layout is as follows:
* bits 0-7: the type (size) of the variable. Eg int8, uint8, bool, etc. Same as VarTypes
* bits 8-15: the generic variable type. Eg string, oneofmany, number, intlist
* bits 16-31: the size of a string, an intlist (which is an implicit array). */
/* XXX - the GenericType will NOT be shifted in the final implementation, just for compatility */
enum SettingDescType {
/* 4 bytes allocated a maximum of 16 types for GenericType */
SDT_NUMX = 0 << 8, // value must be 0!!, refers to any number-type
SDT_BOOLX = 1 << 8, // a boolean number
SDT_ONEOFMANY = 2 << 8, // bitmasked number where only ONE bit may be set
SDT_MANYOFMANY = 3 << 8, // bitmasked number where MULTIPLE bits may be set
SDT_INTLIST = 4 << 8, // list of integers seperated by a comma ','
SDT_STRING = 5 << 8, // string which is only a pointer, so needs dynamic allocation
SDT_STRINGBUF = 6 << 8, // string with a fixed length, preset buffer
SDT_STRINGQUOT = 7 << 8, // string with quotation marks around it (enables spaces in string)
SDT_CHAR = 8 << 8, // single character
/* 7 more possible primitives */
/* 4 bytes allocated a maximum of 16 types for NumberType */
SDT_INT8 = 0 << 4,
SDT_UINT8 = 1 << 4,
SDT_INT16 = 2 << 4,
SDT_UINT16 = 3 << 4,
SDT_INT32 = 4 << 4,
SDT_UINT32 = 5 << 4,
SDT_INT64 = 6 << 4,
SDT_UINT64 = 7 << 4,
/* 8 more possible primitives */
/* Shortcut values */
SDT_BOOL = SDT_BOOLX | SDT_UINT8,
SDT_UINT = SDT_UINT32,
SDT_INT = SDT_INT32,
SDT_STR = SDT_STRING,
SDT_STRB = SDT_STRINGBUF,
SDT_STRQ = SDT_STRINGQUOT,
/* The value is read from the configuration file but not saved */
SDT_NOSAVE = 1 << 31,
};
typedef enum {
IGT_VARIABLES = 0, // values of the form "landscape = hilly"
IGT_LIST = 1, // a list of values, seperated by \n and terminated by the next group block
} IniGroupType;
typedef struct SettingDesc {
const char *name;
uint32 flags;
const void *def;
void *ptr;
const void *many;
} SettingDesc;
void IConsoleSetPatchSetting(const char *name, const char *value);
void IConsoleGetPatchSetting(const char *name);
#endif /* SETTINGS_H */